我有大约500个字符长的字符串,我想加密它们,使结果字符串具有相同的长度(或只是略有不同)。我需要双向加密和解密使用另一个"秘密"字符串双方都知道。它不需要非常安全,我更喜欢更快的解决方案。
从这里的帖子:用Python加密字符串
使用http://code.google.com/p/keyczar/crypter = Crypter.Read("/path/to/your/keys")
ciphertext = crypter.Encrypt("Secret message")
如果要保留长度,则需要使用流密码
注意,双方都需要知道密钥(secret)和初始化向量(不是secret,但必须是唯一的)。
如果没有不同的IV,重用相同的密钥是不安全的,因此您需要以某种方式通信新的IV,这有效地延长了您的加密包。
此外,你真的需要考虑重放攻击——如果有人拦截你的消息,然后一次又一次地发送会发生什么。
以下是RC4的简单示例,使用pycrypto
,不使用IV (RC4不支持):
import Crypto.Cipher.ARC4
plaintext = "x" * 13
c1 = Crypto.Cipher.ARC4.new(key="1")
ciphertext = c.encrypt(plaintext)
assert len(ciphertext) == len(plaintext)
c2 = Crypto.Cipher.ARC4.new(key="1")
result = c2.descrypt(ciphertext)
assert result == plaintext