admin管理员组文章数量:1589943
工作中遇到需要将keil编译的bin文件进行加密后,再将加密数据存储到一个.h文件中,并且是以数组的形式存储,例如:
uint8 DATA_BUF[1025] = {
0x11, 0x12, 0x13...,
0x21, 0x22, 0x23,...
...
};
代码实现如下
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); //通过传参将加密文件和加密后的文件传递进来
QString filename;
QString outname;
filename = argv[1];
outname = argv[2];
QFile binFile(filename);
QFile outBin(outname);
// QFile binFile(QString("H:/../../../MDK/xxx.bin"));//通过直绝对路径的方法获取需加密的文件
// QFile outBin("H:/../../../MDK/xxx_1.h");//通过绝对路径的方法获取加密后要存储的文件,还可以使用相对路径
unsigned char* buf;
int len;
if(binFile.open(QIODevice::ReadOnly))
{
QByteArray data=binFile.readAll();//将bin文件数据读取到QByteArray中
buf = (unsigned char*)data.data();//将buf指针指向data
len = data.size();//获取data的长度
// qDebug() << "len0:" << len ;
// qDebug() << "buf0:" << buf[0] ;
encrypt(buf, buf, len); //加密函数,对数据执行加密
// qDebug() << "buf1:" << buf[0] ;
if(outBin.open(QIODevice::WriteOnly|QIODevice::Truncate|QIODevice::Text))
{
QByteArray array = data.toHex(' ').toUpper().replace(" ", ", 0x").insert(0,"0x");//将data转换成hex形式,比如0x11, 0x22, 0x33,...
QString str = QString::number(len);//将数据长度len转换成字符串
QByteArray ba = str.toLatin1();
const char* str1;
str1 = ba.data();//再次转换成const char*因为write函数不支持string参数,支持const char*参数
// qDebug() << str ;
// qDebug() << str1;
// qDebug() << len ;
//以下是输出一些字符串到.h中
outBin.write("#ifndef __CONFIG_H__\n");
outBin.write("#define __CONFIG_H__\r\n");
outBin.write("#define DDMA_BUF_SIZE ");
outBin.write(str1);
outBin.write("\r\n");
outBin.write("uint8 DATA_Buf[BUF_SIZE]={\n");
for(int i=0;i<array.size();i++)
{
if(i%60 == 0)
{
data = array.left(60);
outBin.write(data);
array.remove(0,60);
outBin.write("\n");//每60个字符进行换行存储
}
}
outBin.write("};\r\n#endif\n");
outBin.close();//关闭输出文件
}
}
else
// qDebug()<<"open failed.";
return a.exec();
}
版权声明:本文标题:qt实现对bin文件的加密以及输出加密后的数据到数组中 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728074968a1144368.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论