使用AES + CTR的PyCrypto问题

使用AES + CTR的PyCrypto问题,第1张

使用AES + CTR的PyCrypto问题

counter
必须返回相同的解密,因为它没有加密,你直觉,所以,一个( 不安全AT ALL )的方式来做到这一点是:

>>> secret = os.urandom(16)>>> crypto = AES.new(os.urandom(32), AES.MODE_CTR, counter=lambda: secret)>>> encrypted = crypto.encrypt("aaaaaaaaaaaaaaaa")>>> print crypto.decrypt(encrypted)aaaaaaaaaaaaaaaa

点击率是一种 分组 密码,因此“ 16次”约束似乎很自然,这让您感到惊讶。

当然,在每次调用中返回 相同
值的所谓“计数器”是完全不安全的。不需要花费太多就可以做得更好,例如:

import arrayclass Secret(object):  def __init__(self, secret=None):    if secret is None: secret = os.urandom(16)    self.secret = secret    self.reset()  def counter(self):    for i, c in enumerate(self.current):      self.current[i] = c + 1      if self.current: break    return self.current.tostring()  def reset(self):    self.current = array.array('B', self.secret)secret = Secret()crypto = AES.new(os.urandom(32), AES.MODE_CTR, counter=secret.counter)encrypted = crypto.encrypt(16*'a' + 16*'b' + 16*'c')secret.reset()print crypto.decrypt(encrypted)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5644870.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存