非对称密码术 - 明文大小错误

时间:2014-08-23 14:21:56

标签: python encryption cryptography private-key public-key

我正在尝试使用python的非对称加密来加密小数据。我目前正在使用M2Crypto生成1024位私钥/公钥对。

使用不同的python库后,有M2Crypto和Pycrypto(有几种变体),我有明文大小问题: ValueError:明文太长。 发生这种情况是因为我尝试加密数据,然后加密最后一次加密(加密加密),例如:

加密: EKpuuser(EKprown(Data)) - > EDATA

puser:公钥用户, prown:私钥(数据)所有者

解密: DKpruser(DKpuown(EData)) - >数据

pruser:私钥用户, puown:公钥(数据)所有者

我尝试了很多我在网络上找到的解决方案,但是唯一一个帮助我解决这个问题的方法就是在加密之前使用签名:

ciphertext = 'xpto'
m_EOi = hashlib.sha1()
m_EOi.update(ciphertext_EOi)
sig_EOi = (m_EOi.hexdigest())

但是这个解决方案不是我需要的,因为在我使用它并加密签名(并加密加密)之后,然后进行解密,不能解密签名,所以我可以&#39 ;到达最初的消息。

编辑:

我已经做过类似的事情:

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)

但我总是有明文大小的问题。

3 个答案:

答案 0 :(得分:2)

asymetric crypto不适用于你想要做的事情......

不对称加密通常用于混合解决方案,用于加密用于加密实际数据的对称加密系统的密钥

所以你通常会有这样的事情:

您的数据+对称(随机)密钥(K) - > symetric cipher(例如AES) - >密文

收件人的K +公共不对称密钥 - >不对称密码 - >柯

然后您将密文和Ke转发给收件人

如果你想问一下这与你的问题有什么关系:

K通常小于非对称密码的最大数据大小,而普通的纯文本数据不是

答案 1 :(得分:1)

经过更多的研究,我找到了一些帮助我的东西。它不是我正在寻找的100%(与明文大小错误相关),但帮助我以一种方式使用签名解决问题。这是链接,我确实找到了信息:

http://e1ven.com/2011/04/06/how-to-use-m2crypto-tutorial

答案 2 :(得分:0)

例如,使用RSA密钥加密数据时,您希望使用OAEP填充填充数据。无论你的明文有多小,比如"今天",它都会被填充到密钥的全模数,例如: 1024位。如果您接下来尝试使用相同大小的密钥加密它,那么它就不合适了。没有空间再次填充。你需要一个更大的钥匙,或者你不需要垫。不填充是一个很大的错误 - 你需要填充是安全的。

为什么你要加密两次呢?它没有让它更安全。你在设计自己的计划吗?这将是有风险的。

为什么要签名密文?密文上的数字签名正在签署一份难以理解的乱码文件 - 尝试在法庭面前签名。为什么不添加MAC?