我想在 c++ 或 java 中实现电子密码本 (ECB) 密码块链接 (CBC) 密码反馈 (CFB) 输出反馈 (OFB) 计数器 (CTR) 模式。但我不知道如何以及从哪里开始。任何人都可以建议我执行的步骤吗?
问问题
5115 次
2 回答
1
这实际上非常简单,假设您有一个名为的函数,该函数block_cipher_encrypt(plaintext, key)
接受一个明文块和一个密钥作为输入,并返回一个密文块。
现在,假设你有一个明文块数组(比如pt[i]
第 i 个明文块)和一个密文块数组ct
。要做欧洲央行,它将是:
for i from 0 to len(pt)-1:
ct[i] = block_cipher_encrypt(pt[i], key)
对于 CBC 模式,您还需要一个 IV,但它仍然非常简单:
ct[0] = block_cipher_encrypt(XOR(pt[0], IV), key)
for i from 1 to len(pt):
ct[i] = block_cipher_encrypt(XOR(pt[i], ct[i-1]), key)
对于其他模式,只需查看 Wikipedia 关于操作模式的文章即可。它们为加密和解密提供了很好的框图。这就是我为上面的伪代码所做的。
于 2013-01-23T16:06:25.433 回答
0
java Crypto API是一个很好的起点。它简要介绍了构成 API 的类,以及它们的使用方式以及您必须扩展哪些类来实现自定义加密技术。您尝试做的大部分事情已经作为标准加密 API 的一部分提供,因此一旦您掌握了它,您只需根据您的目的对其进行自定义。
此外,还有官方的 java指南,用于使用自定义加密技术扩展此 API,这也可能有用。
于 2013-01-23T10:00:28.583 回答