之前我曾使用过很好的公共域名C++ DES implementation,但现在我需要为嵌入式系统提供一些简单,基本,快速的加密技术。
它不需要是牢不可破的,但它确实需要阻止随意的黑客(即,没有任何可用于金钱或身份盗用,但其他个人信息转移到存储卡上可能会丢失或落入错了手。)
由于此处理器的内存有限,我更喜欢能够以离散块(512字节或更少)编码的内容。
该项目不是开源的,也不会使用库,我知道这些库会进一步限制选项 - 公共域名最好,但BSD / apache / etc可能是可以接受的......
我犹豫不决自己(就像每个人一样)。
- 亚当
答案 0 :(得分:7)
如果你只是在寻找混淆,那么带有秘密常量的XOR就像你会发现的那样小。打破它也是微不足道的,因为它易受频率分析的影响,无法找到最常见的英文字母。
如果你需要一个更强大的算法,我建议你看看那些小而快的河豚。它仍然需要内存用于表,但希望它适用于您的应用程序。
Bruce Schneier明确将Blowfish算法置于公共领域,否认专利。您可以从his site获得C(以及其他实现)中的实现。此来源不附带版权声明。我怀疑源代码也属于公共领域,但可能需要更多的检查。
答案 1 :(得分:3)
RC4简单快捷。
答案 2 :(得分:2)
发布C ++ DES实现的同一个人也发布了一个C Rijndael Encryption Algorithm - 我本应该在他的网站上多咬一口,Tiny Encryption Algorithm(academic paper here)也有一个非常小的C实施足迹。
Blowfish看起来不错,就安全性而言,这三者中可能是最好的。
我将从TEA(小代码和内存占用)开始,但将其包装好以便以后可以根据需要转移到另一种算法。它在早期的实现中有明显的弱点,但对于这个项目甚至可能有点过分。
- 亚当
答案 3 :(得分:1)
您可以使用Pseudorandom number generator(PRNG)生成可重复的单词序列,然后使用数据流中的相应单词进行异或。 (发送器和接收器需要事先知道用于生成伪随机序列的参数。)
这种方法并非牢不可破,但是使用常量进行异或操作是一个进步 - 而PRNG实现起来非常简单,通常由每个单词的一次乘法运算和模运算组成。