客户需求解密板子里面的加密文件,做的openssl的加解密的tool
tool去除了加密的,只需要解密,想加密只需反向操作下。
源码:
https://github.com/leolin0518/openssl_dec_enc_tool
记录下:
这个工具是给客户测试使用的
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如何调用其它进程
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";
}
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