C中的简单加密实现

时间:2008-09-06 15:00:06

标签: encryption rsa blowfish des publicdomain

之前我曾使用过很好的公共域名C++ DES implementation,但现在我需要为嵌入式系统提供一些简单,基本,快速的加密技术。

它不需要是牢不可破的,但它确实需要阻止随意的黑客(即,没有任何可用于金钱或身份盗用,但其他个人信息转移到存储卡上可能会丢失或落入错了手。)

由于此处理器的内存有限,我更喜欢能够以离散块(512字节或更少)编码的内容。

该项目不是开源的,也不会使用库,我知道这些库会进一步限制选项 - 公共域名最好,但BSD / apache / etc可能是可以接受的......

我犹豫不决自己(就像每个人一样)。

- 亚当

4 个答案:

答案 0 :(得分:7)

如果你只是在寻找混淆,那么带有秘密常量的XOR就像你会发现的那样小。打破它也是微不足道的,因为它易受频率分析的影响,无法找到最常见的英文字母。

如果你需要一个更强大的算法,我建议你看看那些小而快的河豚。它仍然需要内存用于表,但希望它适用于您的应用程序。

Bruce Schneier明确将Blowfish算法置于公共领域,否认专利。您可以从his site获得C(以及其他实现)中的实现。此来源不附带版权声明。我怀疑源代码也属于公共领域,但可能需要更多的检查。

答案 1 :(得分:3)

RC4简单快捷。

答案 2 :(得分:2)

发布C ++ DES实现的同一个人也发布了一个C Rijndael Encryption Algorithm - 我本应该在他的网站上多咬一口,Tiny Encryption Algorithmacademic paper here)也有一个非常小的C实施足迹。

Blowfish看起来不错,就安全性而言,这三者中可能是最好的。

我将从TEA(小代码和内存占用)开始,但将其包装好以便以后可以根据需要转移到另一种算法。它在早期的实现中有明显的弱点,但对于这个项目甚至可能有点过分。

- 亚当

答案 3 :(得分:1)

您可以使用Pseudorandom number generator(PRNG)生成可重复的单词序列,然后使用数据流中的相应单词进行异或。 (发送器和接收器需要事先知道用于生成伪随机序列的参数。)

这种方法并非牢不可破,但是使用常量进行异或操作是一个进步 - 而PRNG实现起来非常简单,通常由每个单词的一次乘法运算和模运算组成。