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
,将所有文件视为二进制数据。我尝试了此方法,但仍然不起作用“不起作用”的是什么意思是?这就像给你的汽车修理工打电话,把你的问题描述为“我的车不动了”。你把二进制文件当作文本文件对待吗?二进制文件不是文本,把一个当作另一个会引起问题。