使用AES和XTR-DH Crypto ++加密音频文件

时间:2018-10-08 02:16:20

标签: c++ encryption cryptography aes crypto++

我已经完成了编写代码,用于使用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)));
         }
}

可以,但是当我读取加密文件时,它不是像音频文件那样的波形。我的代码有什么问题?是否需要将音频文件转换为字节数组或其他内容?

1 个答案:

答案 0 :(得分:0)

由于您的问题标题和代码不同,因此不清楚您真正想要的是什么,因此我将以您的代码为参考。对我来说,您似乎想加密文件并在以后解密。

您的if块实在太大了……您可以使用std::filesystem轻松地完成所有工作。

您似乎也正在混淆,如果您不熟悉密码算法和/或库本身的文档,则可能会发生这种情况。首先,您del db似乎正在加密ProcessData(?)中的字符串。

毕竟,您可能想看一下库的文档和提供的示例-这些已经对您很有帮助,以帮助您了解如何处理这些事情。

这是文件加密和解密的有效的独立示例。

inputfilename