aes暗号化をテストすると、鍵の長さに関する問題が発生します.
1999 ワード
aesの復号化を行う場合、鍵の長さは32ビットでなければなりません.次のコードを見てください.
テスト中に注釈を開くと、鍵はここで9ビット+'0'しかないので、復号に失敗していることがわかります.だからデータが間違っています.
暗号化された部分でも32以外の鍵を使用すると、復号化に問題が発生します.したがって、ここでは32ビットを固定するデータ長であるべきであるため、最終的なバイト復号はこのようなものであるべきである(もちろん、配列の境界処理はしていないが、正式に適用すれば遮断すべきである):
int Test(char *in_data, char *out_data, char *aes_decrypt_key, int encrypt_chunk_size = 16)
{
if (strlen((char *)aes_decrypt_key) == 0)
{
return 1;
}
unsigned char aes_keybuf[32];
memset(aes_keybuf, 0, sizeof(aes_keybuf));
strcpy((char *)aes_keybuf, aes_decrypt_key);
AES_KEY aeskey;
AES_set_decrypt_key(aes_keybuf, 256, &aeskey);
// unsigned char *aes_keybuf = new unsigned char[strlen(aes_decrypt_key)];
// memset(aes_keybuf, 0, strlen(aes_decrypt_key));
// strcpy((char *)aes_keybuf, aes_decrypt_key);
// AES_KEY aeskey;
// AES_set_decrypt_key(aes_keybuf, 256, &aeskey);
AES_decrypt((unsigned char *)in_data, (unsigned char *)out_data, &aeskey);
return 0;
}
テスト中に注釈を開くと、鍵はここで9ビット+'0'しかないので、復号に失敗していることがわかります.だからデータが間違っています.
暗号化された部分でも32以外の鍵を使用すると、復号化に問題が発生します.したがって、ここでは32ビットを固定するデータ長であるべきであるため、最終的なバイト復号はこのようなものであるべきである(もちろん、配列の境界処理はしていないが、正式に適用すれば遮断すべきである):
// in_data aes , ou_data ,
int AesEncryptBytes(const unsigned char* in_data, unsigned char* out_data,
const char* aes_encrypt_key, int in_data_chunk_size = 16)
{
if (strlen((char *)aes_encrypt_key) == 0)
{
return 1;
}
unsigned char aes_keybuf[32];
memset(aes_keybuf, 0, sizeof(aes_keybuf));
strcpy((char *)aes_keybuf, aes_encrypt_key);
AES_KEY aeskey;
AES_set_encrypt_key(aes_keybuf, 256, &aeskey);
AES_encrypt(in_data, out_data, &aeskey);
return 0;
}
// in_data aes , ou_data ,
int AesDecryptBytes(const unsigned char* in_data, unsigned char* out_data,
const char* aes_decrypt_key, int in_data_chunk_size = 16)
{
if (strlen((char *)aes_decrypt_key) == 0)
{
return 1;
}
unsigned char aes_keybuf[32];
memset(aes_keybuf, 0, sizeof(aes_keybuf));
strcpy((char *)aes_keybuf, aes_decrypt_key);
AES_KEY aeskey;
AES_set_decrypt_key(aes_keybuf, 256, &aeskey);
AES_decrypt(in_data, out_data, &aeskey);
return 0;
}