【发布时间】:2014-05-07 07:44:31
【问题描述】:
我今天整天都在尝试找出如何从二进制文件中读取并解密它。
在我的文件中,前4个字节是描述文件格式,后32个字节是header,用Blowfish加密。
所以我写了这段代码来做到这一点:
string file = "C:\\test.bin";
byte *header = new byte[32];
FILE *data = fopen(file.c_str(), "r");
if(data == NULL)
{
return 1; //Error opening file!
}
char type[6];
type[5] = 0;
if(fread(type, sizeof(type) - 1, 1, data) < 1)
{
return 2;
}
if(strcmp(type, "ABCD") != 0)
{
return 3;
}
if(fread(header, sizeof(header), 1, data) < 1)
{
return 2; //Error reading file!
}
vector<byte> key;
key.push_back(0xAA);
key.push_back(0xBB);
key.push_back(0xCC);
key.push_back(0xDD);
key.push_back(0xAA);
key.push_back(0xBB);
key.push_back(0xCC);
key.push_back(0xDD);
ECB_Mode<Blowfish>::Decryption decryption(key.data(), key.size());
byte out[32];
decryption.ProcessData(out, header, 32);
FILE *outer = fopen("C:\\out.bin", "w");
fwrite (out, sizeof(byte), sizeof(out), outer);
但这并没有正确解密数据。
我做错了什么?
【问题讨论】:
-
请在 SO:coliru.stacked-crooked.com/a/dfb51ef2402b3d80 上发布时使您的代码自包含(69 行代码,我的答案用 39 行代码替换它(实际上,更少,因为我的代码做得更多)) .
-
ECB_Mode可能是一个糟糕的选择。选择EAX、GCM或CCM等模式。ECB模式仅对一个密文块是安全的。超过一个块,该模式会泄漏信息。在您的代码中,您应该在C:\test.bin的密文中看到重复。重复将出现在 8 字节边界上。 -
对不起,我差点忘了...
标签: c++ binary blowfish crypto++