客户需求解密板子里面的加密文件,qt做的openssl的加解密的tool

来源:互联网 发布:js 获取当前日期 周几 编辑:程序博客网 时间:2024/05/25 08:13

客户需求解密板子里面的加密文件,做的openssl的加解密的tool

tool去除了加密的,只需要解密,想加密只需反向操作下。

源码:
https://github.com/leolin0518/openssl_dec_enc_tool

文件解密

算psw的值

记录下:
这个工具是给客户测试使用的
1.主要是公司的RE板子上会把一些config和信息加密备份,客户测试那边想通过一个tool可以解密,查看一些数据。
2.是不同的板子的root级别密码是根据mac地址和sn号的一部分组成一个字符串,然后对字符串进行加密,加完的密钥的某X位作为密码,本来是用openssl的-aes-256-cbc 加密密码,但是-aes-256-cbc 加密的话,每次密钥都会变化,so,用的md5算得。
3.板子加密的是在板子的Linux系统下,加密的,解密的tools是需要在windows下使用。


思路:
我用qt写的,如果使用openssl源码,感觉蛮费事,刚开始使用源码函数写的,发现在windows下,测试,自己加密解密都是ok的。但是把板子里面的备份文件,死活就是解密不了。赶时间,后来就想因为只是简单的使用加密相关的,就直接用qt做个ui, QProcess调用openssl的进程,通过命令的形式获取相关的数据就行了。
但是,然而md5的密码没问题。
加密文件用-aes-256-cbc加解密,在板子是下命令可以解密,然后我把加密文件拷贝到另一台Linux系统的电脑上,同样的命令并不是每次的可以解密的,醉了。很大概率不行。
后来发现,加密的key不要用一些特殊字符,就可以了,原因可能是板子的Linux是裁剪修改过的,mtk的sdk。在板子里面的key和windows下输入的key,可能是编码格式不一样,去除特殊字符就ok了。醉了。

tips:
1.最好是Linux下的openssl 和windows下的openssl版本一致。
2.加密的key不要用一些特殊字符
3.windows下没有echo这些用,每次加密都是通过-in -out 参数“`
openssl enc -aes-256-cbc -salt -a -in /tmp/.config.tgz -out /tmp/.config.enc -k xxxxxx
4.注意加解密行的空格或者回车
5.同样的加密,板子上是先tar打包,加密,然后算一个md5值插入到加密文件的某一行还有EOF行。so,解密的时候先删除加密文件的某一行(md5行)再进行解密,删除EOF行。刚开始做的时候,忘了这个。

md5是,md5为了保持和板子的一致性,用的openssl里面的OpenSSL> dgst -md5 in.log

其实也可以使用qt里面的加密类QCryptographicHash。有哈希,md4,5什么的。
Qt5自带加密方法


QProcess如何调用其它进程

QProcess用法demo

openssl_md5_all是参数cmd.exe  /c  dir       /c是执行完dir命令后关闭命令窗口------------------------------------------------------------------ QProcess p;    QString windwos_cmd="cmd.exe";    p.start(windwos_cmd,QStringList() << "/c" <<openssl_md5_all );    if (p.waitForStarted())    {       p.waitForFinished();       QString p_read = p.readAllStandardOutput();       qDebug() <<p_read;       QStringList p_read_strlist =p_read.split("=");       qDebug() <<"p_read_strlist" << p_read_strlist;       qDebug() << "-------strlist------" << p_read_strlist.last();       ui->plainTextEdit_info->clear();       QString enc_psw = p_read_strlist.last();       qDebug() <<"enc_psw" << enc_psw;       enc_psw = enc_psw.trimmed();//去除字符串首尾的空格       qDebug() <<"enc_psw.trimmed" << enc_psw;       enc_psw = enc_psw.mid(0, 10);       qDebug() <<"enc_psw 前十位" << enc_psw;       ui->plainTextEdit_info->appendPlainText(enc_psw);       qDebug() << "-------ok------";      // ui->plainTextEdit_info->appendPlainText(QString("------------加密完成-------------"));       p.close();    }    else    {        ui->plainTextEdit_info->appendPlainText(QString("------------加密失败-------------"));        qDebug() << "Failed to start";    }

openssl 对称加密算法enc命令详解

利用openssl里的库函数进行AES的加解密—cbc


password_generator

/*************/

openssl enc -aes-256-cbc -salt -a -in /tmp/.config.tgz -out /tmp/.config.enc -k xxxxxx

openssl enc -aes-256-cbc -salt -d -a -in /tmp/RGA_config_v1.02.01_31.10.16_1702.bin -out /tmp/d_config.tgz -k xxxxxx

tar xzf /tmp/d_config.tgz -C /tmp/leo/

enc -aes-256-cbc -salt -d -a -in RGA_config_v1.02.01_31.10.16_1702.bin -out d_config.tgz -k xxxxxxxx

enc -aes-256-cbc -salt -d -a -in in.bin -out d_config.tgz -k xxxxxxx

/*************/

openssl enc -aes-128-cbc -in in.txt -out out.txt -a -k 12345678

openssl enc -aes-128-cbc -d -in RGA_config_v1.02.01_01.11.16_0003.bin -out xx.tar -a -k xxxxxx

openssl enc -aes-128-cbc -d -in out -out de_out -a -k 12345678