我有AES加密实现。它有ECB、CBC和CTR等几种模式。我想使用CBC模式。我有加密代码,但不能解密。
加密:
void AES_CBC_encrypt_buffer(uint8_t* buf, uint32_t length, uint8_t* key, uint8_t* init_vector)
{
uint8_t RoundKey[240];
KeyExpansion(RoundKey, key);
for (uintptr_t i = 0; i < length; i += AES_BLOCKLEN)
{
XorWithIv(buf, init_vector);
Cipher((state_t*)buf, RoundKey);
init_vector = buf;
buf += AES_BLOCKLEN;
}
}解密:
void AES_CBC_decrypt_buffer(uint8_t* buf, uint32_t length, uint8_t* key, uint8_t* init_vector)
{
uint8_t RoundKey[240];
KeyExpansion(RoundKey, key);
for (uintptr_t i = 0; i < length; i += AES_BLOCKLEN)
{
CopyMemory(init_vector, buf, 16);
InvCipher((state_t*)buf, RoundKey);
XorWithIv(buf, init_vector);
buf += AES_BLOCKLEN;
}
}AES_BLOCKLEN = 16
我做错了什么?
发布于 2019-11-02 20:37:47
您甚至在使用init_vector之前就已经覆盖了它。这不可能是对的!我不是100%确定,但我认为你只需要把你的CopyMemory调用下移两行。
https://stackoverflow.com/questions/58670056
复制相似问题