【问题标题】:AES function giving not the output that I expectedAES 函数没有给出我期望的输出
【发布时间】:2017-07-20 12:51:52
【问题描述】:

我目前正在为学校做一个项目(比较两个加密函数的运行时间)。所以我搜索了AES。我找到了这个好看的解决方案:https://www.c-plusplus.net/forum/148732

现在,当我将 aes 用作密钥并将 aes 用作明文时,我会得到一个奇怪的结果,其中的字符不是 a-z

我的完整项目可以查看:https://gogs.4seul.de/root/CryptLaufzeit

void MainWindow::on_pushButtonAesCalc_clicked()
{
    //Check if key and plaintext is given (if not -> display alert,if yes -> save in vars)
    QString key=ui->lineEditAesKey->text();
    QString plaintext=ui->lineEditAesPlaintext->text();
    if (key != "" && plaintext != "") {
        //Time measure start
        std::chrono::time_point<std::chrono::system_clock> start, end;
        start = std::chrono::system_clock::now();
        //Create AES Object
        //char array for key and plaintext; length is size_t type and length of char array
        size_t sizeKey = key.size();
        size_t sizePlain = plaintext.size();
        char *plainCharArr = new char [sizePlain];
        char *keyCharArr = new char [sizeKey];
        memcpy( keyCharArr, key.toStdString().c_str() ,sizeKey);
        memcpy( plainCharArr, plaintext.toStdString().c_str() ,sizePlain);
        aes AES;
        sizePlain = AES.encrypt(&plainCharArr,sizePlain,keyCharArr);
        //Time measure end
        end = std::chrono::system_clock::now();

        std::chrono::duration<double> elapsed_seconds = end-start;
        std::time_t end_time = std::chrono::system_clock::to_time_t(end);

        //Rerun everything and get steps in between (optional)
        //Set values
        QMessageBox msgBoxTest;
        msgBoxTest.setText(plaintext + "|" + plainCharArr);
        msgBoxTest.exec();
    } else {
        //Display Dialog
        QMessageBox msgBox;
        msgBox.setText("Bitte fülle alle Felder aus!");
        msgBox.exec();
    }
}

【问题讨论】:

    标签: c++ qt encryption aes


    【解决方案1】:

    AES 是一种加密算法。该功能未在 [a-zA-Z0-9] 上关闭。这意味着您可以在加密字符串中获得 0 到 256 之间的任何值。

    如果您仍想可视化加密输出(用于比较和验证目的),我建议将每个字节转换为仅包含可读字符的十六进制表示。

    请参阅this,了解如何将字节缓冲区转换为十六进制。

    【讨论】:

    • 对话是在我在这里提供的代码片段中完成的,还是在 aes 算法中完成的?功能应该是这样的:cryptool-online.org/index.php?Itemid=135
    • 在将它显示在 msgBox 上之前,您必须将 plainCharArr 转换为十六进制。
    • Thx,将尝试您的解决方案,当它工作时,我将其标记为正确答案
    • 考虑 aes...如何防止 aes 返还不可打印的值,同时又不会丢失正确的解压缩和加密?
    • 简单地说,你不能。如果您想要可打印的输出,您将不得不使用其他一些加密方案。或者像我上面说的那样通过转换为十六进制来使 AES 的输出“可打印”。
    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2013-02-13
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多