【发布时间】:2014-10-17 05:53:48
【问题描述】:
我正在尝试使用非对称加密和 python 加密小数据。我目前正在使用 M2Crypto 生成 1024 位私钥/公钥对。
使用不同的 python 库后,例如 M2Crypto 和 Pycrypto(有几个变体),我遇到了明文大小问题:ValueError: Plaintext is too long。 发生这种情况是因为我试图加密数据,然后加密最后一次加密(加密上的加密),例如:
加密: EKpuuser(EKprown(Data)) -> EData
用户:公钥用户, prown:私钥(数据)所有者
解密: DKpruser(DKpuown(EData)) -> 数据
pruser:私钥用户, puown:公钥(数据)所有者
我尝试了很多我在网上找到的解决方案,但唯一能帮助我解决这个问题的方法是在加密之前使用签名:
ciphertext = 'xpto'
m_EOi = hashlib.sha1()
m_EOi.update(ciphertext_EOi)
sig_EOi = (m_EOi.hexdigest())
但是这个解决方案不是我需要的,因为在我使用它并加密签名(并加密加密)之后,然后进行解密,无法解密签名,所以我无法得到初始消息。
已编辑:
我已经做过类似的事情,例如:
BLOCK_SIZE = 32
PADDING = '{'
message = 'today'
key = 'aaaaaaaaaa123456'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) cipher = AES.new(key)
encoded = EncodeAES(cipher, message)
key = 123
h1 = SHA256.new()
h1.update(key)
key1 = h1.digest()[0:16]
iv1 = Random.new().read(16)
cipher1 = AES.new(key1, AES.MODE_CFB, iv1)
criptogram1 = iv1 + cipher1.encrypt(data1)
但我总是有明文大小的问题。
【问题讨论】:
-
您尝试加密的明文有多长?
-
我正在使用非常小的数据进行测试。例如像“今天”这样的字符串。
标签: python encryption cryptography private-key public-key