AES算法出问题,跪求大神们帮助啊

wanglu343280746 wanglu343280746 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
unsigned char* AES::Cipher(unsigned char* input)
{
unsigned char state[4][4];
int i,r,c;

for(r=0; r<4; r++)
{
for(c=0; c<4 ;c++)
{
state[r][c] = input[c*4+r];
}
}

AddRoundKey(state,w[0]);

for(i=1; i<=10; i++)
{
SubBytes(state);
ShiftRows(state);
if(i!=10)MixColumns(state);
AddRoundKey(state,w[i]);
}

for(r=0; r<4; r++)
{
for(c=0; c<4 ;c++)
{
input[c*4+r] = state[r][c];
}
}

return input;
}

unsigned char* AES::InvCipher(unsigned char* input)
{
unsigned char state[4][4];
int i,r,c;

for(r=0; r<4; r++)
{
for(c=0; c<4 ;c++)
{
state[r][c] = input[c*4+r];
}
}

AddRoundKey(state, w[10]);
for(i=9; i>=0; i--)
{
InvShiftRows(state);
InvSubBytes(state);
AddRoundKey(state, w[i]);
if(i)
{
InvMixColumns(state);
}
}

for(r=0; r<4; r++)
{
for(c=0; c<4 ;c++)
{
input[c*4+r] = state[r][c];
}
}

return input;
}

void* AES::Cipher(void* input, int length)
{
unsigned char* in = (unsigned char*) input;
int i;
if(!length)
{
while(*(in+length++));
in = (unsigned char*) input;
}
for(i=0; i<length; i+=16)
{
Cipher(in+i);
}
return input;
}

void* AES::InvCipher(void* input, int length)
{
unsigned char* in = (unsigned char*) input;
int i;
for(i=0; i<length; i+=16)
{
InvCipher(in+i);
}
return input;
}

这是我用到的加密解密函数,
m_pAes->Cipher(pBuffer, strlen(pBuffer));
m_pAes->InvCipher(pBuffer, strlen(pBuffer));
这个算法是我在网上找的,不太明白其中的原理。
问题来了,我现在pBuffer的长度为463,但是加密后长度为406;而且解密的时候最后一部分乱码没解出来。
当我把pBuffer的内容减少了一点,加密后的strlen(pBuffer)448,再减少一点为432,但是解密出来都正常。而且448和432都是16的倍数。这个问题怎么解决啊,现在我的Pbuffer内容不能改,求大家帮助啊;
和Key有关系吗?
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
wanglu343280746
C++ 语言 65,214 成员 250,514 内容