Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我想加密测试文件夹中的所有文件_C++_Cryptography_Aes_Crypto++ - Fatal编程技术网

C++ 我想加密测试文件夹中的所有文件

C++ 我想加密测试文件夹中的所有文件,c++,cryptography,aes,crypto++,C++,Cryptography,Aes,Crypto++,我想加密测试文件夹中的所有文件。 这对文本文件有效,但对二进制文件无效 源代码: void l(string& foldername, vector<string>& output) { DIR* dir; struct dirent* DirEntry; if ((dir = opendir(foldername.c_str())) != NULL) { while ((DirEntry = readdir(dir)

我想加密测试文件夹中的所有文件。 这对文本文件有效,但对二进制文件无效

源代码:

void l(string& foldername, vector<string>& output) {
    DIR* dir;
    struct dirent* DirEntry;

    if ((dir = opendir(foldername.c_str())) != NULL)
    {
        while ((DirEntry = readdir(dir)) != NULL)
        {
            if (strcmp(DirEntry->d_name, ".") && strcmp(DirEntry->d_name, ".."))
            {
                string subfolder(foldername);
                subfolder += "\\";
                subfolder += DirEntry->d_name;
                DIR* subdir;
                if ((subdir = opendir(subfolder.c_str())) != NULL)
                {
                    l(subfolder, output);
                    closedir(subdir);
                }
                else
                {
                    string fullname(foldername);
                    fullname = fullname + '\\' + DirEntry->d_name;
                    output.push_back(fullname);
                }
            }
        }
        closedir(dir);
    }
}

void start() {
    try
    {
        vector <string> volumes;
        volumes.push_back("test\\");
        for (string v : volumes)
        {
            vector<string> o;
            l(v, o);
            for (string en : o)
            {
                SecByteBlock key(AES::MAX_KEYLENGTH + AES::BLOCKSIZE);
                HKDF<SHA256> s256;
                s256.DeriveKey(key, key.size(), (const CryptoPP::byte*)pa.data(), pa.size(), (const CryptoPP::byte*)iv.data(), iv.size(), NULL, 0);
                ifstream file(en, ios::binary);
                std::string t((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
                if (file.is_open())
                {
                    string enc;
                    CTR_Mode<AES>::Encryption ee;
                    ee.SetKeyWithIV(key, AES::MAX_KEYLENGTH, key + AES::MAX_KEYLENGTH);
                    StringSource encryptor(t.data(), true, new StreamTransformationFilter(ee, new StringSink(enc)));
                    ofstream e(en, ios::binary);
                    e << enc;
                }
            }
        }
    }
    catch (...)
    {
    }
}
void l(字符串和文件夹名、向量和输出){
DIR*DIR;
结构方向*DirEntry;
if((dir=opendir(foldername.c_str())!=NULL)
{
而((DirEntry=readdir(dir))!=NULL)
{
if(strcmp(DirEntry->d_name,“.”)和strcmp(DirEntry->d_name,“…”)
{
字符串子文件夹(foldername);
子文件夹+=“\\”;
子文件夹+=DirEntry->d_名称;
DIR*subdir;
if((subdir=opendir(subfolder.c_str())!=NULL)
{
l(子文件夹,输出);
closedir(subdir);
}
其他的
{
字符串全名(foldername);
fullname=fullname+'\\'+DirEntry->d\u name;
输出。推回(全名);
}
}
}
closedir(dir);
}
}
void start(){
尝试
{
矢量体积;
卷。推回(“测试\\”;
用于(字符串v:卷)
{
向量o;
l(v,o);
for(字符串en:o)
{
SecByteBlock密钥(AES::MAX_KEYLENGTH+AES::BLOCKSIZE);
香港发展基金s256;
s256.派生密钥(key,key.size(),(const-CryptoPP::byte*)pa.data(),pa.size(),(const-CryptoPP::byte*)iv.data(),iv.size(),NULL,0);
ifstream文件(en,ios::binary);
std::string t((std::istreambuf_迭代器(文件)),std::istreambuf_迭代器();
if(file.is_open())
{
字符串enc;
CTR_模式::加密ee;
ee.SetKeyWithIV(key,AES::MAX_KEYLENGTH,key+AES::MAX_KEYLENGTH);
StringSource加密程序(t.data(),true,新StreamTransformationFilter(ee,新StringSink(enc));
流e(en,ios::binary);

e尝试使用
std::vector
而不是
std::string
,将所有文件视为二进制数据。我尝试了这个方法,但仍然不起作用“不起作用”是什么意思?这就像打电话给你的汽车修理工,并将你的问题描述为“我的汽车不动”。您是否将二进制文件视为文本文件?二进制文件不是文本,将一个文件视为另一个文件会导致问题。请尝试使用
std::vector
而不是
std::string
,将所有文件视为二进制数据。我尝试了此方法,但仍然不起作用“不起作用”的是什么意思是?这就像给你的汽车修理工打电话,把你的问题描述为“我的车不动了”。你把二进制文件当作文本文件对待吗?二进制文件不是文本,把一个当作另一个会引起问题。