我正在尝试使用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)
但我总是有明文大小的问题。
答案 0 :(得分:2)
asymetric crypto不适用于你想要做的事情......
不对称加密通常用于混合解决方案,用于加密用于加密实际数据的对称加密系统的密钥
所以你通常会有这样的事情:
您的数据+对称(随机)密钥(K) - > symetric cipher(例如AES) - >密文
收件人的K +公共不对称密钥 - >不对称密码 - >柯
然后您将密文和Ke转发给收件人
如果你想问一下这与你的问题有什么关系:
K通常小于非对称密码的最大数据大小,而普通的纯文本数据不是
答案 1 :(得分:1)
经过更多的研究,我找到了一些帮助我的东西。它不是我正在寻找的100%(与明文大小错误相关),但帮助我以一种方式使用签名解决问题。这是链接,我确实找到了信息:
答案 2 :(得分:0)
例如,使用RSA密钥加密数据时,您希望使用OAEP填充填充数据。无论你的明文有多小,比如"今天",它都会被填充到密钥的全模数,例如: 1024位。如果您接下来尝试使用相同大小的密钥加密它,那么它就不合适了。没有空间再次填充。你需要一个更大的钥匙,或者你不需要垫。不填充是一个很大的错误 - 你需要填充是安全的。
为什么你要加密两次呢?它没有让它更安全。你在设计自己的计划吗?这将是有风险的。
为什么要签名密文?密文上的数字签名正在签署一份难以理解的乱码文件 - 尝试在法庭面前签名。为什么不添加MAC?