【问题标题】:execute enc command from QtProgram从 QtProgram 执行 enc 命令
【发布时间】: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


【解决方案1】:

我想我看到了问题。

argv.append(" enc -des-cbc -a -in C:/Users/Lincoln/Desktop/test.txt -pass pass:123");

可能需要:

argv.append("enc");
argv.append("-des-cbc");
argv.append("-a");
argv.append("-in");
argv.append("C:/Users/Lincoln/Desktop/test.txt");
argv.append("-pass");
argv.append("pass:123");

-out 参数集执行相同操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2012-07-15
    • 2017-07-04
    • 2011-06-15
    • 1970-01-01
    • 2014-04-18
    • 2012-08-03
    相关资源
    最近更新 更多