PHP で Rijndael暗号アルゴリズムを使う機会があったので、AESとの違いをメモ。

アルゴリズム キー長 (bytes) IVの長さ (bytes) ブロック長 (bytes)
AES-128 16 16 16
AES-192 24 16 16
AES-256 32 16 16
Rijndael-128 16/24/32 16 16
Rijndael-192 16/24/32 24 24
Rijndael-256 16/24/32 32 32

※基本的にCBCモード(Cipher Block Chainingモード)の場合、ブロック長とIVの長さは同じになる。

エラーメモ

mcrypt + Rijndael でサポートしないキーを渡した場合:

PHP Warning:  mcrypt_encrypt(): Key of size 17 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported in php

mcrypt + Rijndae-256 でサポートしないIVを渡した場合:

PHP Warning:  mcrypt_encrypt(): Received initialization vector of size 30, but size 32 is required for this encryption mode in php

AES と Rijndael の違い

以下、ChatGPTの回答の抜粋:

RijndaelはAESの基盤となるアルゴリズムですが、AESとして採用される際に以下のような制限が設けられました:

  • ブロックサイズ: AESではブロックサイズが128ビットに固定されていますが、Rijndaelは128、192、256ビットのブロックサイズをサポートしています。
  • 鍵長: AESの鍵長は128、192、256ビットですが、Rijndaelではより広い範囲の鍵長をサポートできます。

Rijndaelをベースにより標準化させたものがAES.