Python中的DES、AES和RSA加密算法都是常用的加密技术,它们各有特点和使用场景。
DES (Data Encryption Standard):
DES是一种对称加密算法,这意味着加密和解密使用相同的密钥。它是一个较老的加密标准,使用56位的密钥。
优点:
- 算法简单,易于实现。
- 在硬件上运行效率很高。
缺点:
- 密钥长度较短,容易受到暴力破解攻击。
- 已不再被视为安全的加密方法。
AES (Advanced Encryption Standard):
AES也是一种对称加密算法,是DES的继任者。它可以使用128、192和256位的密钥。
优点:
- 密钥长度较长,安全性高。
- 已成为加密标准,广泛用于政府和商业数据加密。
缺点:
- 对于非常高安全级别的场景(如军事用途),存在理论上的侧信道攻击可能。
RSA (Rivest-Shamir-Adleman):
RSA是一种非对称加密算法,使用一对密钥,即公钥加密和私钥解密。
优点:
- 密钥长度可达2048位或更高,安全性很高。
- 公钥加密技术适合分布式计算环境。
缺点:
- 相对于对称加密算法,RSA较慢,不适合大量数据的加密。
- 密钥生成和管理比对称密钥复杂。
Python加密示例:
DES加密示例:
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
# DES 加密
key = b'8bytekey' # DES 密钥长度必须为8字节
data = b'Hello DES' # 待加密数据
cipher = DES.new(key, DES.MODE_ECB)
padded_data = pad(data, DES.block_size)
encrypted_data = cipher.encrypt(padded_data)
# DES 解密
decrypted_data = cipher.decrypt(encrypted_data)
print(unpad(decrypted_data, DES.block_size))
AES加密示例:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
# AES 加密
key = b'16bytekey123456' # AES 密钥长度可为16(128位), 24(192位)或32(256位)字节
data = b'Hello AES' # 待加密数据
cipher = AES.new(key, AES.MODE_ECB)
padded_data = pad(data, AES.block_size)
encrypted_data = cipher.encrypt(padded_data)
# AES 解密
decrypted_data = cipher.decrypt(encrypted_data)
print(unpad(decrypted_data, AES.block_size))
RSA加密示例:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# RSA 加密
key_pair = RSA.generate(2048) # 生成公钥和私钥
public_key = key_pair.publickey()
cipher_rsa = PKCS1_OAEP.new(public_key)
data = b'Hello RSA' # 待加密数据
encrypted_data = cipher_rsa.encrypt(data)
# RSA 解密
cipher_rsa = PKCS1_OAEP.new(key_pair)
decrypted_data = cipher_rsa.decrypt(encrypted_data)
print(decrypted_data)
而在现实世界的应用中,网站前端通常不负责生成或获取加密密钥,密钥的生成和存储通常在服务器端进行,而前端则通过安全的通道接收必要的密钥或密钥信息。
对于对称加密密钥的共享,通常由以下机制完成:
- 通过SSL/TLS安全的HTTPS连接,服务器和客户端在握手过程中建立一个共享密钥,这个过程称为密钥协商。这个密钥可以用于后续的对称加密通信。
- 在某些情况下,会使用非对称加密算法(如RSA)来安全地将对称密钥从服务器传输到客户端。客户端使用公钥加密一个生成的密钥,并将其发送到服务器,服务器再用私钥解密来获取这个对称密钥。
对于非对称加密密钥,如RSA:
- 公钥通常是可以公开的,可能会直接嵌入网页中,或者通过API接口提供给客户端。
密钥有些通过api单独传输
(改图从其他文章获取)
通常都会html页面中
- 私钥则绝对不能公开,并且通常存储在服务器端,用于解密或签名数据。
在爬虫项目中应用这些密钥,通常是为了模仿浏览器的行为,访问受保护的数据。以下是几个可能的应用示例:
-
解密数据:
如果你的爬虫需要收集的数据是加密过的,你需要知道如何解密这些数据。在合法的情况下,服务器可能会提供数据和解密所需的密钥(通常是在登录或API调用的过程中)。 -
加密请求:
如果你需要向服务器发送敏感信息,比如在模拟登录过程中,可能需要使用公钥来加密信息。 -
绕过防爬机制:
一些网站利用JavaScript来动态生成密钥,并与服务器交换信息。在这种情况下,爬虫可能需要模拟执行JavaScript代码,才能正确地生成密钥或者解密由服务器发送的数据。【python如何执行javascript代码】
在爬虫项目中,你必须遵守相关法律法规,确保你有权访问和使用目标网站的数据。不恰当地使用加密和解密可能涉及到违法行为,因此在爬去目标数据前要备有法律意识⚠️。