我已经完成了编写代码,用于使用AES CFB模式加密WAV格式的音频文件以及用于生成密钥的XTR-DH。
此处的代码
int main()
{
AutoSeededRandomPool aSRPA;
XTR_DH xtrA(aSRPA, 170, 160);
string inputfilename;
string encryptfilename;
int aesKeyLength = SHA256::DIGESTSIZE;
int defBlockSize = AES::BLOCKSIZE;
const std::string extention(".wav");
byte iv[AES::BLOCKSIZE];
aSRPA.GenerateBlock(iv, AES::BLOCKSIZE);
SecByteBlock privateA(xtrA.PrivateKeyLength());
SecByteBlock publicA(xtrA.PublicKeyLength());
SecByteBlock secretKeyA(xtrA.AgreedValueLength());
xtrA.GenerateKeyPair(aSRPA, privateA, publicA);
SecByteBlock key(SHA256::DIGESTSIZE);
SHA256().CalculateDigest(key, secretKeyA, secretKeyA.size());
cout << "file path plain text : ";
cin >> inputfilename;
cout << "file path cipher text : ";
cin >> encryptfilename;
if (inputfilename != extention &&
encryptfilename != extention &&
inputfilename.size() > extention.size() &&
encryptfilename.size() > extention.size() &&
inputfilename.substr(inputfilename.size() - extention.size()) ==
".wav" &&
encryptfilename.substr(encryptfilename.size() -
extention.size()) == ".wav")
{
CFB_Mode<AES>::Encryption cfbEncryption(key, aesKeyLength, iv);
cfbEncryption.ProcessData((byte*)inputfilename.c_str(),
(byte*)inputfilename.c_str(),
inputfilename.length() + 1);
FileSink file_kunci(encryptfilename.c_str());
StringSource ss(inputfilename, true,
new StreamTransformationFilter(cfbEncryption,
new Redirector(file_kunci)));
}
}
可以,但是当我读取加密文件时,它不是像音频文件那样的波形。我的代码有什么问题?是否需要将音频文件转换为字节数组或其他内容?
答案 0 :(得分:0)
由于您的问题标题和代码不同,因此不清楚您真正想要的是什么,因此我将以您的代码为参考。对我来说,您似乎想加密文件并在以后解密。
您的if块实在太大了……您可以使用std::filesystem
轻松地完成所有工作。
您似乎也正在混淆,如果您不熟悉密码算法和/或库本身的文档,则可能会发生这种情况。首先,您del db
似乎正在加密ProcessData
(?)中的字符串。
毕竟,您可能想看一下库的文档和提供的示例-这些已经对您很有帮助,以帮助您了解如何处理这些事情。
这是文件加密和解密的有效的独立示例。
inputfilename