mcryptからopensslへの移行

実現したいこと

mcryptで実装された暗号化コードを、opensslによる暗号方式に移行したい。

前提

暗号化、復号化のアウトプットは、mcryptの時とおなじ結果にしたいです。

発生している問題・エラーメッセージ

$method = 'aes-128-ecb'; $ivLength = openssl_cipher_iv_length($method); $iv = openssl_random_pseudo_bytes($ivLength); ←ここの実行でエラー $options = 0; $encrypted = openssl_encrypt('平文', $method, 'key文字列', $options, $iv);

上記をphpで実行すると、

"message": "openssl_random_pseudo_bytes(): Argument #1 ($length) must be greater than 0",

が出てしまいます。
openssl_cipher_iv_lengthの戻り値が"0"であることが原因で、1以上なら処理に成功するのですが、
メソッドは"aes-128-ecb"のまま変えたくないので、手づまりな状態です。

該当のソースコード

移行前の旧コードはこちらです。

PHP

1protected function encrypt($plain_text)2{3 // Mcryptモジュールを開く4 $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');5 6 // 初期化ベクトルのサイズ7 $iv_size = mcrypt_enc_get_iv_size($td);8 9 srand(business_time());10 // 初期化ベクトルの生成11 $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);12 13 // 初期化14 mcrypt_generic_init($td, 'keyyyyyyyy', $iv);15 16 // 暗号化17 // INFO: 空白文字を保持するためにbase64でエンコード18 $encrypted_text = base64_encode(mcrypt_generic($td, base64_encode($plain_text)));19 20 // 終了処理21 mcrypt_generic_deinit($td);22 23 // Mcryptモジュールを閉じる24 mcrypt_module_close($td);25 26 return $encrypted_text;27}

試したこと

https://shinobit.net/archives/131
こちらを参考に実装を進めていますが、うまくいきません。

補足情報(FW/ツールのバージョンなど)

php5.3.28→8.2.5への移行です。

コメントを投稿

0 コメント