C++ rijndael算法-解密问题

C++ rijndael算法-解密问题,c++,C++,我使用以下代码加密我的文件: static const char* KEY = "Test"; 缓冲区的内容可能不重要,问题是我无法解密加密的数据。显然,我使用的是相同的密钥,但解密的结果与原始输入缓冲区不同。可能会发生什么?这听起来很奇怪 解密代码: LPCSTR name = "skills.dat"; int counter = 0; std::ifstream myFile(name, std::ios::binary | std::ios::out ); if(myFil

我使用以下代码加密我的文件:

static const char* KEY = "Test";

缓冲区的内容可能不重要,问题是我无法解密加密的数据。显然,我使用的是相同的密钥,但解密的结果与原始输入缓冲区不同。可能会发生什么?这听起来很奇怪

解密代码:

LPCSTR name = "skills.dat";
    int counter = 0;
std::ifstream myFile(name, std::ios::binary | std::ios::out );

if(myFile.fail())
{
    myFile.close();
    return false;
}

int len = (TOTAL_SKILLS + 1) * sizeof(int);
char* buffer = new char[len];

myFile.read(buffer,len);
myFile.close();

CRC4 crc;
crc.Decrypt(buffer,KEY,len);

我通过删除Encrypt函数和密钥生成散列中的SWAP宏解决了我的问题。

如果使用
counter*4
,我假设您的代码只适用于整数为32位的平台。对吗?此外,您迫切需要添加错误检查。你怎么知道
myFile.read
成功了呢?另外,从我所能看出,RC4看起来完全不适合你的应用程序。RC4实际上只适用于随机且仅使用一次的临时密钥。即使如此,缺少任何数据完整性检查和固定值位置也会使数据容易被篡改。例如,我只需将第23个字节与0x0A进行XORing,就可以将我的第五项技能的延迟从10更改为0。那么你推荐哪种加密系统?我讨厌在没有正式说明你的要求的情况下给出建议。至少,我必须知道您计划如何生成和存储密钥,以及您试图防范哪些类型的威胁。如果每次随机生成一个新密钥,您可能会将RC4与HMAC一起使用,但我不会冒险。不,不是随机密钥,我计划使用静态密钥进行加密和解密。这不是一个软件化的东西,只是足以保护普通用户阅读文件,而当我将打包我的最终可执行文件时,要找到使用的密钥将更加困难——并非不可能。
LPCSTR name = "skills.dat";
    int counter = 0;
std::ifstream myFile(name, std::ios::binary | std::ios::out );

if(myFile.fail())
{
    myFile.close();
    return false;
}

int len = (TOTAL_SKILLS + 1) * sizeof(int);
char* buffer = new char[len];

myFile.read(buffer,len);
myFile.close();

CRC4 crc;
crc.Decrypt(buffer,KEY,len);