【发布时间】:2013-04-06 19:42:47
【问题描述】:
我有一个程序可以生成字节数组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() 不同,因为我现在不在我的代码附近。我希望我的编码示例清楚地表明了我的意图。
添加: 我要提一下,C 代码运行在一个名为“Atmega168”的芯片上......所以如果使用库是唯一可靠的方法,那么任何人都可以推荐针对这种芯片优化的库吗? http://www.atmel.com/devices/atmega168.aspx
【问题讨论】:
-
你对一个问题关心太多,你的问题也不清楚,例如加密不一定是用户输入或密码,你也在引入新的网络解决方案的典型问题,例如数据损坏和网络/通信的可靠性(仅举2个例子),并且由于某些原因,您假设压缩数据总是最好的。以我有限的经验,我认为您需要一个可以让您抽象更多的层,并且当您根据需要放入文件时,它会处理协议,试试 0mq。
-
这是一个链接zeromq.org
-
无线协议是蓝牙,所以我觉得应该可靠地发送数据。我可能是错的......到目前为止,在测试中,数据已经完全通过,尽管我使用 Java DataInputStream readfully 方法来获取数据
-
我了解 0MQ,但从跨许多不同系统的排队和任务交付系统的角度来看。这只是一个嵌入式芯片到另一个。
-
如果您在压缩之前加密,您将不会得到任何压缩。
标签: c encryption binary embedded compression