好的,在你们训斥我之前:我知道这是一个可怕的代码和超弱的密码。我只是想找出以下内容是否有资格成为分组密码(即使是非常基本和弱的密码(
int main(){
int mac = 123;
int key = 789;
int enc = mac^key;
printf("encrypted text = %dn",enc);
int plain = enc^key;
printf("decrypted text = %dn",plain);
return 0;
}
这是输出:
encrypted text = 878
decrypted text = 123
为了
创建分组密码,必须遵循某些一般性。您显示的代码在技术上不是分组密码。一般性,例如:
- 在分组密码中,消息被分解为块,然后每个块都被加密(即像非常大的字符上的替换 - 64位或更多(
- 分组密码由两种配对算法组成,一种用于加密 E,另一种用于解密 E−1。两种算法都接受两个输入:大小为 n 位的输入块和大小为 k 位的密钥,从而产生一个 n 位输出块。对于任何一个固定密钥,解密都是加密的反函数。
分组密码模式(ECB、CBC(下的加密使用特定流:
- 分组密码必须做的第一件事是将明文分解为大小相等的块,通常为 8 个字节,例如
imablock
的 ASCII 编码。 - 使用密码加密明文。
- 解密消息。
密码的选择取决于实现。
关键是,虽然您可能已经遵循了加密解密的流程,但您的编程并不能满足分组密码的一般性。您需要将消息分解为块以实现对称密码。
您实现的是简单的加密,而不是分组密码。
有很多参考资料:
- 分组密码 - 对分组密码和相关操作的简洁解释。
- 维基百科 - 分组密码 - 明显的参考.. :P
希望对您有所帮助。 :)