1.6 KiB
1.6 KiB
挑战18:实现CTR流密码模式
字符串:
L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLXzhPweyyMTJULu/6/kXX0KSvoOLSFQ==
...在CTR模式下解密为近似英语的内容,CTR是一种将AES分组密码转换为流密码的AES分组密码模式,参数如下:
key=YELLOW SUBMARINE
nonce=0
format=64位无符号小端nonce,
64位小端块计数(字节计数 / 16)
CTR模式非常简单。
CTR模式不是加密明文,而是加密运行计数器,产生16字节的密钥流块,与明文进行XOR。
例如,对于具有这些参数的消息的前16字节:
keystream = AES("YELLOW SUBMARINE",
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
...对于下一个16字节:
keystream = AES("YELLOW SUBMARINE",
"\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00")
...然后:
keystream = AES("YELLOW SUBMARINE",
"\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00")
CTR模式不需要填充;当你用完明文时,你只需停止XOR密钥流并停止生成密钥流。
解密与加密相同。生成相同的密钥流,XOR,并恢复明文。
解密此函数顶部的字符串,然后使用你的CTR函数来加密和解密其他东西。
这是好代码中唯一重要的分组密码模式
大多数现代密码学依靠CTR模式将分组密码适配为流密码,因为我们想要加密的大部分内容更好地描述为流而不是块序列。Daniel Bernstein曾经对Phil Rogaway开玩笑说,好的密码系统不需要"解密"变换。像CTR这样的构造就是他所说的。