好吧,在你们谴责我之前:我知道这是一个可怕的代码和 super 弱的密码。我只是想找出以下是否有资格成为分组密码(即使是非常基本和弱的密码)
int main(){
int mac = 123;
int key = 789;
int enc = mac^key;
printf("encrypted text = %d\n",enc);
int plain = enc^key;
printf("decrypted text = %d\n",plain);
return 0;
}
这是输出:
encrypted text = 878
decrypted text = 123
最佳答案
为了创建 block 密码,必须遵循某些一般性原则。您显示的代码在技术上不是分组密码。概论如:
- 在 block 密码中,消息被分成 block ,每个然后加密(即像对非常大的字符的替换- 64 位或更多)
- 分组密码由两个配对算法组成,一个用于加密,E,另一个用于解密,E−1。两种算法都接受两个输入:一个大小为 n 位的输入 block 和一个大小为 k 位的 key ,从而产生一个 n 位输出 block 。对于任何一个固定 key ,解密是加密的逆函数。
block 密码模式(ECB、CBC)中的加密使用特定的流程:
- 分组密码必须做的第一件事是将明文分成大小相同的 block ,通常为 8 个字节,例如
imablock
的 ASCII 编码. - 使用密码对明文进行加密。
- 解密消息。
密码的选择取决于实现。
重点是,虽然您可能遵循了加密-解密流程,但您的程序并不满足 block 密码的一般性。您需要将消息分成 block 实现 symmetric cipher .
您实现的是简单加密而非分组密码。
引用了这么多:
- Block Ciphers - 对分组密码和相关操作的简洁明了的解释。
- Wikipedia - Block Ciphers - 明显的引用.. :P
希望对您有所帮助。 :)
关于c - 此代码是否有资格成为 block 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108352/