PHP で AES-256-CBC 暗号化と復号化
綺麗にまとまったので書き込んでおきます。
<?php //http://qiita.com/ymmtmsys/items/a38d4ddadf548c8a482c を参考にしました。 $plain_data = 'plain text'; $password = 'PASSWORD'; $method = 'AES-256-CBC'; $initial_vector_length = openssl_cipher_iv_length($method); $initial_vector = mcrypt_create_iv($initial_vector_length, MCRYPT_RAND); $data = $initial_vector . $plain_data; $base64_encode_crypt_data = openssl_encrypt($data, $method, $password, 0, $initial_vector); //暗号化 $encode_crypt_data = base64_decode($base64_encode_crypt_data); //別の箇所で暗号化された場合で URL safe な encode を行っている場合、下記の方が良い。 //$encode_crypt_data = base64_decode(str_replace(array('-', '_', '='), array('+', '/', ''), $base64_encode_crypt_data)); //initial vector は先頭 $initial_vector_length の BYTE に格納されている $initial_vector = substr($encode_crypt_data, 0, $initial_vector_length); //暗号文本体は $encode_crypt_data の先頭の $initial_vector を除いたもの全て $crypt_body_data = substr($encode_crypt_data, $initial_vector_length); $base64_crypt_body_data = base64_encode($crypt_body_data); echo openssl_decrypt($base64_crypt_body_data, $method, $password, 0, $initial_vector) . PHP_EOL; //復号化
$ php openssl.php plain text
mimic28号でした。