Qt对二进制文件进行加密及解密操作
在工作中可能会做一些二进制文件加密及解密的任务,比如说仪器的时序指令bin文件。
#include
#include
#include
#include
#include
#include
#include
#include
// 加密密钥(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;
}