0

我正在寻找如何使用 DES 密码和 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

谢谢!!

4

2 回答 2

3

世界上到处都是由阅读应用密码学的人设计的糟糕的安全系统。

不要通过电线发送您自己的“加密”内容。您缺少 HMAC,缺少密钥交换协议,缺少线框协议(这正是您的问题“我如何知道大小”的答案)。只需使用现成的协议,如 TLS/SSL。gnu-tls为 SSL/TLS 提供了一个易于使用的 API,openssl 也支持它,但使用起来非常麻烦。不管你做什么,不要开始编写你自己的协议,你会想出另一个损坏的“加密”协议,因为错误的密钥交换或“优化的随机数”或丢失的帧签名等等。

这是一个使用 gnu-tls 的简单示例:使用 C++ API 的简单客户端示例

于 2011-08-16T21:27:13.590 回答
2

在我看到的 DES 实现中,我只记得看到相同大小的明文和密文。维基百科似乎证实了这一点。由于 DES 适用于 64 位块,因此只要实现 DES 的代码正确填充输入以匹配那些 64 位边界,就可以做到这一点。事实上,这几乎就是分组密码的定义(这就是 DES)。

因此,我敢打赌,您会看到它与使用加密文本大小的另一台计算机完美配合。您自己的一些测试应该能够绝对证实这一点。

此外,我完全同意 Jeremy 的评论,即在大多数情况下,DES 是一种糟糕的加密算法选择。三重 DES 或 AES 是更好的选择。

于 2011-08-16T21:25:36.340 回答