>  기사  >  백엔드 개발  >  Python 크롤러의 90%에 사용되는 일반적인 암호화 알고리즘 목록

Python 크롤러의 90%에 사용되는 일반적인 암호화 알고리즘 목록

王林
王林앞으로
2023-04-13 10:52:041752검색

Python 크롤러의 90%에 사용되는 일반적인 암호화 알고리즘 목록

데이터를 캡처할 때 "토큰", "서명" 등과 같은 많은 암호화된 매개변수를 접하게 될 것이라고 믿습니다. 오늘 편집자는 데이터 캡처 프로세스 중에 이러한 매개변수를 살펴보도록 안내할 것입니다. 주류 암호화 알고리즘, 그 특징은 무엇이며 암호화 방법은 무엇입니까? 이를 아는 것은 이러한 암호화 매개변수를 역으로 해독하는 데 많은 도움이 될 것입니다!

1. 기본 상식

가장 먼저 이해해야 할 것은 암호화와 복호화란 무엇일까요? 이름에서 알 수 있듯이

  • 암호화: 평문 데이터를 암호문으로 변환하는 과정
  • 복호화: 암호화의 역과정, 즉 암호문에서 원본 평문을 복구하는 과정.

암호화 및 암호 해독 알고리즘의 작업은 일반적으로 아래 그림과 같이 각각 암호화 키(암호화 키)와 암호 해독 키(암호화 키)인 키 집합의 제어 하에 수행됩니다.

Python 크롤러의 90%에 사용되는 일반적인 암호화 알고리즘 목록

암호화 알고리즘은 대칭 암호화, 비대칭 암호화, 해싱 알고리즘으로 구분되며 그 중

  • 대칭 암호화: 즉 RC4, AES, DES 및 기타 암호화 알고리즘과 같이 암호화 및 복호화에 동일한 키가 사용됩니다.
  • 비대칭 암호화: 즉, RSA 암호화 알고리즘 등 암호화와 복호화에 서로 다른 키를 사용합니다.
  • 해시 알고리즘: 해시 함수라고도 합니다. 다양한 길이의 입력 메시지에 대해 고정된 출력을 생성하며 출력 값은 해시 값

2입니다. Base64 의사 암호화

Base64는 엄밀히 말하면 암호화 알고리즘이 아니며 단지 64자를 사용하는 인코딩 방법입니다. 즉, A-Z, a-z, 0-9, +, /는 데이터를 인코딩하기 위해 사용되며 HTTP 환경에서 더 긴 식별 정보를 전송하는 데 사용할 수 있습니다. Base64 인코딩은 읽을 수 없으며 읽기 전에 디코딩해야 합니다. 우리는 Python을 사용하여 모든 URL에서 Base64 인코딩을 수행합니다. 코드는 다음과 같습니다:

import base64
# 想将字符串转编码成base64,要先将字符串转换成二进制数据
url = "www.baidu.com"
bytes_url = url.encode("utf-8")
str_url = base64.b64encode(bytes_url)# 被编码的参数必须是二进制数据
print(str_url)

Output:

b'd3d3LmJhaWR1LmNvbQ=='

마찬가지로, 코드는 다음과 같습니다.

url = "d3d3LmJhaWR1LmNvbQ=="
str_url = base64.b64decode(url).decode("utf-8")
print(str_url)

Output:

www.baidu.com

3 . 암호화

MD5는 널리 사용되는 선형 해시 알고리즘이며 생성된 암호화는 대소문자가 균일한 문자와 숫자로 구성된 고정 길이(32비트 또는 16비트) 데이터입니다. 최종 암호화를 통해 생성된 데이터는 되돌릴 수 없습니다. 즉, 무차별 대입 크래킹을 통하지 않는 한 암호화된 데이터를 통해 원래 문자열로 쉽게 복원할 수 없습니다.

Python에서 MD5 암호화를 구현해 보겠습니다.

import hashlib
str = 'this is a md5 demo.'
hl = hashlib.md5()
hl.update(str.encode(encoding='utf-8'))
print('MD5加密前为 :' + str)
print('MD5加密后为 :' + hl.hexdigest())

출력:

MD5加密前为 :this is a md5 demo.
MD5加密后为 :b2caf2a298a9254b38a2e33b75cfbe75

위에서 언급한 것처럼 MD5 암호화는 보안을 저하시키기 위해 무차별 대입 크랙이 가능하므로 실제 작업 중에 MD5 암호화를 이중으로 추가하여 보안을 강화합니다. 코드는 다음과 같습니다:

# post传入的参数
params = "123456"
# 加密后需拼接的盐值(Salt)
salt = "asdfkjalksdncxvm"
def md5_encrypt():
m = md5()
m.update(params.encode('utf8'))
sign1 = m.hexdigest()
return sign1
def md5_encrypt_with_salt():
m = md5()
m.update((md5_encrypt() + salt).encode('utf8'))
sign2 = m.hexdigest()
return sign2

4. AES/DES 대칭 암호화

우선 DES 암호화에 대해 이야기하자면, 전체 이름은 데이터 암호화 표준입니다. 즉, 데이터 암호화 표준은 대칭 암호화 중 공통입니다. 즉, 암호화 및 복호화 프로세스에 사용되는 키가 동일하므로 크랙을 원할 경우 컴퓨팅 성능이 충분히 강한 한 무차별 열거형을 사용할 수 있습니다.

AES의 전체 이름은 고급 암호화 표준(Advanced Encryption Standard)으로, DES 알고리즘을 대체하고 오늘날 가장 널리 사용되는 대칭 암호화 알고리즘 중 하나입니다. AES 알고리즘을 이해하려면 먼저 키, 패딩, 모드라는 세 가지 기본 개념을 이해해야 합니다.

Key

우리는 열쇠에 대해 이전에 많이 이야기했습니다. 열쇠를 잠그거나 잠금 해제하는 데 사용할 수 있다고 생각하면 됩니다. AES는 128비트, 192비트, 256비트의 세 가지 키 길이를 지원합니다.

填充

而至于填充这一概念,AES的分组加密的特性我们需要了解,具体如下图所示:

Python 크롤러의 90%에 사용되는 일반적인 암호화 알고리즘 목록

简单来说,AES算法在对明文加密的时候,并不是把整个明文一股脑儿地加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块的长度为128比特。

这些明文块经过AES加密器的复杂处理之后,生成一个个独立的密文块,将这些密文块拼接到一起就是最终的AES加密的结果了。

那么这里就有一个问题了,要是有一段明文的长度是196比特,如果按照每128比特一个明文块来拆分的话,第二个明文块只有64比特了,不足128比特该怎么办呢?这个时候就轮到填充来发挥作用了,默认的填充方式是PKCS5Padding以及ISO10126Padding。

不过在AES加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。

模式

AES的工作模式,体现在了把明文块加密成密文块的处理过程中,主要有五种不同的工作模式,分别是CBC、ECB、CTR、CFB以及OFB模式,同样地,如果在AES加密过程当中使用了某一种工作模式,解密的时候也必须采用同样地工作模式。最后我们用Python来实现一下AES加密。

import base64
from Crypto.Cipher import AES
def AES_encrypt(text, key):
 pad = 16 - len(text) % 16
 text = text + pad * chr(pad)
 text = text.encode("utf-8")
 encryptor = AES.new(key.encode('utf-8'), AES.MODE_ECB)
 encrypt_text = encryptor.encrypt(text)
 encrypt_text = base64.b64encode(encrypt_text)
 return encrypt_text.decode('utf-8')

或者大家也可以看一下网上其他的AES加密算法的实现过程,基本上也都是大同小异的,由于篇幅有限,今天暂时就先介绍到这里,后面要是大家感兴趣的话,会去分享一下其他加密算法的实现原理与特征。

위 내용은 Python 크롤러의 90%에 사용되는 일반적인 암호화 알고리즘 목록의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제