0

デバイスからの生の文字列を解読するために、openssl ライブラリを使用しています。

デバイスが使用している暗号化は AES - 128 ビットです。

これが私のコードです:

unsigned char *aes_decrypt(EVP_CIPHER_CTX *e, unsigned char *ciphertext, int *len)
{
  int p_len = *len, f_len = 0;
  unsigned char *plaintext = new unsigned char [p_len + 128];
  memset(plaintext,0,p_len + 128);
  syslog(LOG_NOTICE,"P_LEN BEFORE: %d",p_len);
  EVP_DecryptInit_ex(e, NULL, NULL, NULL, NULL);
  EVP_DecryptUpdate(e, plaintext, &p_len, ciphertext, *len);
  EVP_DecryptFinal_ex(e, plaintext+p_len, &f_len);

  syslog(LOG_NOTICE,"P_LEN : %d",p_len);
  syslog(LOG_NOTICE,"F_LEN : %d",f_len);
  *len = p_len + f_len;

  syslog(LOG_NOTICE,"MARIMEA ESTE %d",*len);
  return plaintext;
}

私の質問は次のとおりです。

  1. 暗号化された文字列の長さと復号化された文字列の長さは同じですか? (AES 128 ビット)

  2. f_len が復号化されたバイト数を表している場合 (間違っている場合は訂正してください)、復号化された実際のデータよりも小さいのはなぜですか?

ありがとう

4

1 に答える 1

4

AES-128 はブロック暗号です。ブロックサイズは 128 ビット (16 バイト) です。したがって、暗号文の長さは常に 16 バイトの倍数です。したがって、暗号文は平文よりも大きくなる可能性があります。

編集:

答え:

  1. いいえ、暗号化されたデータはそれより大きくても同じ長さでもかまいません。
  2. 間違っています。f_len は、復号化されたバイト数を表します。(p_len + f_len)それをします。
于 2012-11-08T11:27:40.020 に答える