【发布时间】:2021-04-08 14:26:50
【问题描述】:
我有以下问题,我想用 openssl 加密一个文件,但它没有给我任何结果,我得到它被加密的消息,但是在 Qt 输出面板中,我得到一个无效的命令。 任何关于我如何做到这一点的建议将不胜感激,我正在使用 QProcess 和 Openssl 1.1,下面我留下代码,提前致谢。
代码:
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QProcess>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QProcess *proc=new QProcess(this);
QStringList argv;
argv.append(" enc -des-cbc -a -in C:/Users/Lincoln/Desktop/test.txt -pass pass:123");
argv.append(" -out C:/Users/Lincoln/Desktop/test.enc");
bool res=proc->startDetached("D:/OpenSSL-Win64/bin/openssl.exe",argv);
if(res)
QMessageBox::information(this,qApp->applicationName(),"Archivo encriptado");
else
QMessageBox::critical(this,qApp->applicationName(),"Hubo un error");
}
请注意,我得到了一个加密文件,但它下面还有其他内容。
【问题讨论】:
-
为什么你的
argv字符串有一个前导空格? -
另外,startDetached 只是启动进程,它不会等待程序完成。
-
你应该将命令行的每一部分单独放入
argv,如argv.append("enc"); argv.append("-des-cbc");等等。正如所写,openssl.exe接收整个字符串enc -des-cbc ...作为第一个参数,并且该字符串当然不匹配任何有效的命令。
标签: c++ qt encryption openssl