在Python和Ruby中,可以使用以下代码示例来进行AES和PBKDF2的对比。
Python代码示例:
import os
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2
# AES encryption
def aes_encrypt(password, data):
salt = os.urandom(16)
key = PBKDF2(password, salt, dkLen=32)
cipher = AES.new(key, AES.MODE_ECB)
ciphertext = cipher.encrypt(data)
return salt + ciphertext
# AES decryption
def aes_decrypt(password, data):
salt = data[:16]
ciphertext = data[16:]
key = PBKDF2(password, salt, dkLen=32)
cipher = AES.new(key, AES.MODE_ECB)
plaintext = cipher.decrypt(ciphertext)
return plaintext
password = "password"
data = b"Hello, World!"
encrypted_data = aes_encrypt(password, data)
decrypted_data = aes_decrypt(password, encrypted_data)
print("Decrypted data:", decrypted_data.decode())
Ruby代码示例:
require 'openssl'
require 'base64'
# AES encryption
def aes_encrypt(password, data)
salt = OpenSSL::Random.random_bytes(16)
cipher = OpenSSL::Cipher::AES.new(256, :ECB)
cipher.encrypt
cipher.key = OpenSSL::PKCS5.pbkdf2_hmac(password, salt, 2000, cipher.key_len, "sha256")
encrypted_data = cipher.update(data) + cipher.final
salt + encrypted_data
end
# AES decryption
def aes_decrypt(password, data)
salt = data[0, 16]
encrypted_data = data[16..-1]
cipher = OpenSSL::Cipher::AES.new(256, :ECB)
cipher.decrypt
cipher.key = OpenSSL::PKCS5.pbkdf2_hmac(password, salt, 2000, cipher.key_len, "sha256")
decrypted_data = cipher.update(encrypted_data) + cipher.final
decrypted_data
end
password = "password"
data = "Hello, World!"
encrypted_data = aes_encrypt(password, data)
decrypted_data = aes_decrypt(password, encrypted_data)
puts "Decrypted data: #{decrypted_data}"
这些代码示例演示了如何使用AES和PBKDF2在Python和Ruby中进行加密和解密。注意,这里使用的是AES的ECB模式,这只适用于对于每个数据块都是唯一且不重复的情况。对于更安全的加密,建议使用CBC模式并使用随机生成的IV(初始化向量)。
同时,还需要注意PBKDF2的迭代次数和哈希算法的选择。在示例代码中,PBKDF2的迭代次数为2000次,哈希算法为SHA256。可以根据需要进行适当的调整。
请确保在实际使用中,密钥和其他敏感信息的存储和传输得到适当的保护和处理。