我正在寻找使用DES cypher和openssl标头在C中编码内容的示例,我找到了这个:http://www.codealias.info/technotes/des_encryption_using_openssl_a_simple_example
代码几乎是完美的,但我对这些东西并不那么专业,而且我在C中的C知识并不是那么大,因为我在PIC和AVR微控制器上使用它......
无论如何在代码中:
printf("Clear text\t : %s \n",clear);
memcpy(encrypted,Encrypt(key,clear,sizeof(clear)), sizeof(clear));
printf("Encrypted text\t : %s \n",encrypted);
memcpy(decrypted,Decrypt(key,encrypted,sizeof(clear)), sizeof(clear));
printf("Decrypted text\t : %s \n",decrypted);
正如你所看到的,sizeof(clear)被用作字符串的大小...问题是在示例中我们知道文本字符串的大小...但是当我发送这个文本时另一台电脑不知道的网络......
如何解决这个问题......我不太了解为什么我需要将原始字符串的大小解密:S
谢谢!
答案 0 :(得分:3)
The world is full of bad security systems designed by people who read Applied Cryptography.
请勿在线路上发送您自己的'加密'内容。你错过了一个HMAC,你错过了一个密钥交换协议,你错过了一个线框协议(这正是你的问题'如何知道大小'的答案)。只需使用现成的协议,如TLS / SSL。 gnu-tls提供了一个易于使用的SSL / TLS API,openssl也支持它,但使用起来非常繁琐。无论你做什么,都不要开始编写自己的协议,你会想出另一个破解的“加密”协议,因为密钥交换不好或者“优化的nonce”或丢失的帧签名等等。
以下是使用gnu-tls:Simple client example using the C++ API
的简单示例答案 1 :(得分:2)
在我看过DES的实现中,我只记得看到相同大小的明文和密文。 Wikipedia seems to confirm this。由于DES适用于64位块,因此只要实现DES的代码正确地填充输入以匹配那些64位边界就可以。事实上,这几乎就是block cipher的定义(这就是DES的目的)。
因此,我打赌你会看到它使用加密文本的大小完美地与其他计算机一起工作。你自己的一些测试应该能够完全证实这一点。
另外,我坚信Jeremy的观点,即在大多数情况下,DES是加密算法的不良选择。三重DES或AES是更好的选择。