Qt对二进制文件进行加密及解密操作

发布于:2024-06-12 ⋅ 阅读:(62) ⋅ 点赞:(0)

在工作中可能会做一些二进制文件加密及解密的任务,比如说仪器的时序指令bin文件。

#include <iostream>
#include <fstream>
#include <vector>
#include <QCryptographicHash>
#include <QFile>
#include <QDataStream>
#include <QByteArray>
#include <QIODevice>

// 加密密钥(128位)
const QByteArray encryptionKey = "0123456789abcdef";

// 加密函数
void encryptFile(const QString& inputFile, const QString& outputFile) {
    QFile input(inputFile);
    QFile output(outputFile);

    if (!input.open(QIODevice::ReadOnly) || !output.open(QIODevice::WriteOnly)) {
        std::cout << "Failed to open the input or output file." << std::endl;
        return;
    }

    // 创建一个存储文件内容的缓冲区
    QByteArray buffer = input.readAll();

    // 加密文件内容
    QByteArray encryptedData = QCryptographicHash::hash(buffer, QCryptographicHash::Sha256);
    QByteArray encryptedKey = QCryptographicHash::hash(encryptionKey, QCryptographicHash::Sha256);

    for (int i = 0; i < buffer.size(); ++i) {
        encryptedData[i] = encryptedData[i] ^ encryptedKey[i % encryptedKey.size()];
    }

    // 写入加密后的文件内容
    QDataStream outputStream(&output);
    outputStream.writeRawData(encryptedData.constData(), encryptedData.size());

    // 关闭文件
    input.close();
    output.close();

    std::cout << "File encrypted successfully." << std::endl;
}

// 解密函数
void decryptFile(const QString& inputFile, const QString& outputFile) {
    QFile input(inputFile);
    QFile output(outputFile);

    if (!input.open(QIODevice::ReadOnly) || !output.open(QIODevice::WriteOnly)) {
        std::cout << "Failed to open the input or output file." << std::endl;
        return;
    }

    // 创建一个存储文件内容的缓冲区
    QByteArray buffer = input.readAll();

    // 解密文件内容
    QByteArray decryptedData = buffer;
    QByteArray encryptedKey = QCryptographicHash::hash(encryptionKey, QCryptographicHash::Sha256);

    for (int i = 0; i < decryptedData.size(); ++i) {
        decryptedData[i] = decryptedData[i] ^ encryptedKey[i % encryptedKey.size()];
    }

    // 写入解密后的文件内容
    QDataStream outputStream(&output);
    outputStream.writeRawData(decryptedData.constData(), decryptedData.size());

    // 关闭文件
    input.close();
    output.close();

    std::cout << "File decrypted successfully." << std::endl;
}

int main() {
    QString inputFile = "input_file.bin";
    QString encryptedFile = "encrypted_file.bin";
    QString decryptedFile = "decrypted_file.bin";

    encryptFile(inputFile, encryptedFile);
    decryptFile(encryptedFile, decryptedFile);

    return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到