您的位置:首页 > 健康 > 养生 > Qt对二进制文件进行加密及解密操作

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

2024/12/23 16:30:36 来源:https://blog.csdn.net/qq_43517257/article/details/139544590  浏览:    关键词:Qt对二进制文件进行加密及解密操作

在工作中可能会做一些二进制文件加密及解密的任务,比如说仪器的时序指令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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com