qt实现对bin文件的加密以及输出加密后的数据到数组中

 工作中遇到需要将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();
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值