|
1
12
这个
CTR是 块 密码,所以让你吃惊的“一次16次”约束是很自然的。 当然,一个所谓的“计数器”返回 相同的 每次调用的值 is grossly insecure . 做得更好不需要太多,例如……
|
|
2
4
AES是一种 block cipher :这是一种算法(更准确地说,是一对算法),它获取一个密钥和一个消息块,并对该块进行加密或解密。无论密钥大小如何,块的大小始终为16个字节。 CTR是 mode of operation . 它是一对建立在块密码基础上的算法,生成流密码,可以加密和解密任意长度的消息。 ctr的工作原理是将连续的消息块与计数器连续值的加密相结合。计数器的大小必须是一个块,以便它是块密码的有效输入。
通过让调用者选择一个计数器函数,Pypcrypto库为您提供了足够的绳索来吊死自己。你应该使用
|
|
3
2
它必须与密码块大小相同。ctr模式只加密计数器,并用加密的计数器块XORS明文。 笔记:
标准免责声明: 加密很难。如果你不明白自己在做什么, 将 弄错了。
使用ScRyPT。
加密包括
|
|
|
4
1
初始化向量(“计数器”)需要在加密和解密之间保持不变,就像密钥一样。它的使用使您可以对同一文本进行一百万次编码,并每次获得不同的密文(防止某些已知的明文攻击和模式匹配/攻击)。解密时仍需使用与加密时相同的IV。通常,当您开始解密流时,您将IV初始化为与开始加密该流时相同的值。 见 http://en.wikipedia.org/wiki/Initialization_vector 有关初始化向量的信息。 请注意,os.urandom(16)不是“确定性的”,这是对计数器函数的要求。我建议您使用递增函数,因为这就是ctr模式的设计方法。初始计数器值应该是随机的,但连续的值应该完全可以从初始值(确定性)预测出来。初始值甚至可以帮你处理(我不知道细节) 关于密钥、IV和输入大小,听起来您选择的密码的块大小为16字节。你所描述的一切都符合这一点,对我来说似乎很正常。 |
|
|
5
1
我可能会迟到,我可能忽略了之前的答案,但我没有找到一个明确的声明,说明如何(至少是imho)根据密码包来完成这项工作。 crypto.util.counter包提供了可调用的状态计数器,这非常有用,但至少对于我来说,不正确地使用它们是很容易的。
您必须创建一个计数器,例如
现在您不能对同一个密码对象调用解密函数,因为它将再次调用同一个计数器,同时该计数器已递增,可能几次。您需要做的是用用相同参数初始化的不同计数器创建一个新的密码对象。这样,解密就可以正常工作,从完成加密的同一点开始计数器。 工作示例如下:
|
|
|
xchrisbradley · 使用Zig签名对功能选择器进行编码 2 年前 |
|
|
Shirin Ebadi · 加载公钥字节作为DH密钥 2 年前 |
|
YoavKlein · 为什么jwt.io会给我私钥部分来填充? 2 年前 |
|
|
birb · RFC-6238 TOTP实现与示例不匹配 2 年前 |
|
|
Stefan N · 如何生成N个字符的所有字母数字组合[重复] 2 年前 |
|
|
xdivayze · 在线和离线客户端之间的打包密钥交换 3 年前 |