Bootstrap

爬虫中常见的加密算法【DES/AES/RSA】

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单独传输
API获取密钥
(改图从其他文章获取)

通常都会html页面中
RSA公钥

  • 私钥则绝对不能公开,并且通常存储在服务器端,用于解密或签名数据。

在爬虫项目中应用这些密钥,通常是为了模仿浏览器的行为,访问受保护的数据。以下是几个可能的应用示例:

  1. 解密数据
    如果你的爬虫需要收集的数据是加密过的,你需要知道如何解密这些数据。在合法的情况下,服务器可能会提供数据和解密所需的密钥(通常是在登录或API调用的过程中)。

  2. 加密请求
    如果你需要向服务器发送敏感信息,比如在模拟登录过程中,可能需要使用公钥来加密信息。

  3. 绕过防爬机制
    一些网站利用JavaScript来动态生成密钥,并与服务器交换信息。在这种情况下,爬虫可能需要模拟执行JavaScript代码,才能正确地生成密钥或者解密由服务器发送的数据。【python如何执行javascript代码】

在爬虫项目中,你必须遵守相关法律法规,确保你有权访问和使用目标网站的数据。不恰当地使用加密和解密可能涉及到违法行为,因此在爬去目标数据前要备有法律意识⚠️。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;