12,964
回編集
618行目: | 618行目: | ||
return iv; | return iv; | ||
} | |||
static bool encryptFile(const QString &inputFilename, const QString &outputFilename, const QByteArray &key, QByteArray &iv) { | |||
try { | |||
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption encryptor; | |||
encryptor.SetKeyWithIV(reinterpret_cast<const byte*>(key.constData()), key.size(), reinterpret_cast<const byte*>(iv.constData())); | |||
CryptoPP::FileSource(inputFilename.toStdString().c_str(), true, | |||
new CryptoPP::StreamTransformationFilter(encryptor, new CryptoPP::FileSink(outputFilename.toStdString().c_str()))); | |||
return true; | |||
} | |||
catch (const CryptoPP::Exception& e) { | |||
qCritical() << "File encryption error:" << e.what(); | |||
return false; | |||
} | |||
} | |||
static bool decryptFile(const QString &inputFilename, const QString &outputFilename, const QByteArray &key, const QByteArray &iv) | |||
{ | |||
try { | |||
CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption decryptor; | |||
decryptor.SetKeyWithIV(reinterpret_cast<const byte*>(key.constData()), key.size(), reinterpret_cast<const byte*>(iv.constData())); | |||
CryptoPP::FileSource(inputFilename.toStdString().c_str(), true, | |||
new CryptoPP::StreamTransformationFilter(decryptor, new CryptoPP::FileSink(outputFilename.toStdString().c_str()))); | |||
return true; | |||
} | |||
catch (const CryptoPP::Exception& e) { | |||
qCritical() << "File decryption error:" << e.what(); | |||
return false; | |||
} | |||
} | } | ||
686行目: | 719行目: | ||
QDataStream in(&file); | QDataStream in(&file); | ||
in >> iv >> data; | in >> iv >> data; | ||
file.close(); | |||
return true; | |||
} | |||
static bool saveIV(const QString &filename, const QByteArray &iv) | |||
{ | |||
QFile file(filename); | |||
if (!file.open(QIODevice::WriteOnly)) { | |||
qCritical() << "Unable to open file for writing IV:" << filename; | |||
return false; | |||
} | |||
QDataStream out(&file); | |||
out << iv; | |||
file.close(); | |||
return true; | |||
} | |||
static bool loadIV(const QString &filename, QByteArray &iv) | |||
{ | |||
QFile file(filename); | |||
if (!file.open(QIODevice::ReadOnly)) { | |||
qCritical() << "Unable to open file for reading IV:" << filename; | |||
return false; | |||
} | |||
QDataStream in(&file); | |||
in >> iv; | |||
file.close(); | file.close(); | ||
721行目: | 786行目: | ||
qDebug() << "Encryption key:" << key.toHex(); | qDebug() << "Encryption key:" << key.toHex(); | ||
// | // 入力ファイルと出力ファイルの設定 | ||
QString inputFilename = "input.txt"; | |||
QString encryptedFilename = "encrypted.bin"; | |||
QString decryptedFilename = "decrypted.txt"; | |||
QString ivFilename = "iv.bin"; | |||
// | // 平文を暗号化 | ||
QByteArray iv = SecureAESCrypto::generateIV(); | QByteArray iv = SecureAESCrypto::generateIV(); | ||
if (SecureAESCrypto::encryptFile(inputFilename, encryptedFilename, key, iv)) { | |||
qDebug() << "File encrypted successfully."; | |||
qDebug() << " | |||
// | // 初期化ベクトル (IV) の保存 | ||
if (SecureAESCrypto:: | if (SecureAESCrypto::saveIV(ivFilename, iv)) { | ||
qDebug() << " | qDebug() << "IV saved successfully."; | ||
// | // 初期化ベクトル (IV) の読み込み | ||
QByteArray | QByteArray loadedIV; | ||
if (SecureAESCrypto:: | if (SecureAESCrypto::loadIV(ivFilename, loadedIV)) { | ||
qDebug() << " | qDebug() << "IV loaded successfully."; | ||
// 復号 | // 復号 | ||
if (SecureAESCrypto::decryptFile(encryptedFilename, decryptedFilename, key, loadedIV)) { | |||
qDebug() << "File decrypted successfully."; | |||
qDebug() << " | |||
} | } | ||
else { | else { | ||
qDebug() << " | qDebug() << "File decryption failed."; | ||
} | } | ||
} | } | ||
else { | else { | ||
qDebug() << "Failed to load | qDebug() << "Failed to load IV."; | ||
} | } | ||
} | } | ||
else { | else { | ||
qDebug() << "Failed to save | qDebug() << "Failed to save IV."; | ||
} | } | ||
} | } | ||
else { | else { | ||
qDebug() << "File encryption failed."; | |||
} | } | ||