我有一个程序可以生成字节数组unsigned * char
并使用 fwrite 通过无线流将该数据发送出去。
我想将该字节数组压缩并加密为另一个字节数组,但由于我在嵌入式系统上运行代码,我宁愿不加载新库;我宁愿自己写出压缩和加密函数。
所以,换句话说,我的程序如下:
void send(STREAM* s, unsigned* char byteArr) {
fwrite(s, byteArr);
}
相反,我想创建一个函数:
void send(STREAM* s, unsigned* char byteArr) {
unsgiend* char compressedArr = compressCharArr(byteArr);
unsigned* char encryptedArr = encryptCharArr(compressedArr)
fwrite(s, encryptedArr);
}
unsigned* char encryptedArr(unsigned* char byteArr) {
// make the encrypted byte array (?)
}
unsigned* char compressedArr (unsigned* char byteArr) {
// make the compressed byte array (?)
}
我的问题是:我可以自己写出什么简单的算法来用 C 语言完成这个任务?我更喜欢只涉及标准 C 代码、没有库、只有数学、for 循环等的东西。
至于加密,我知道加密需要通信两端的密钥/密码。很好,让我们假设密钥是共享的并且我们使用的是对称加密。
我不介意使用与 zip、7zip、gzip 相同的算法——我知道这些压缩系统还包括加密/密码保护。我只是不确定如何在不将库、DLL 等插入嵌入式系统的情况下简单地实现它。
PS - 我的语法可能与 fwrite() 不一致,因为我现在不在我的代码附近。我希望我的编码示例清楚地表明了我的意图。
ADD:我要提一下,C 代码运行在一个名为“Atmega168”的芯片上......所以如果使用库是唯一可靠的方法,那么任何人都可以推荐针对这种芯片优化的库吗?http://www.atmel.com/devices/atmega168.aspx