- 第三引数までで良いのかと思ったら警告が出る
Using an empty Initialization Vector (iv) is potentially insecure and not recommended
openssl_random_pseudo_bytesだとバイナリになりコードに書けないのでivは一旦文字列化しています。
固定する必要が無ければopenssl_random_pseudo_bytesのままでOK
// バイナリを16進数に変換
$hex_iv_string = bin2hex(openssl_random_pseudo_bytes(openssl_cipher_iv_length($method_name)));
$iv = hex2bin($hex_iv_string);// 16進数をバイナリに変換
または
// バイナリをbase64に変換
$base64_iv_string = base64_encode(openssl_random_pseudo_bytes(openssl_cipher_iv_length($method_name)));
$iv = base64_decode($base64_iv_string);// base64をバイナリに変換
$target_string = '暗号化したい文字列';
$method_name = 'AES-256-CBC';
$key_string = 'キー文字列';
// 固定する必要がある場合はこれを実行した値で固定
$hex_iv_string = bin2hex(openssl_random_pseudo_bytes(openssl_cipher_iv_length($method_name)));
$iv = hex2bin($hex_iv_string);
// 暗号化
$base64_encrypt_string = openssl_encrypt(
$target_string,
$method_name,
$key_string,
0,
$iv
);
// 復号
$decrypt_string = openssl_decrypt(
$base64_encrypt_string,
$method_name,
$key_string,
0,
$iv
);
var_dump($target_string);
var_dump($base64_encrypt_string);
var_dump($decrypt_string);
string(27) "暗号化したい文字列"
string(44) "BLUJX2CNbIy+kSps/0xhNt7yMDZIBuomh5jpuVQD+aQ="
string(27) "暗号化したい文字列"
$target_string = '暗号化したい文字列';
$method_name = 'AES-256-CBC';
$key_string = 'キー文字列';
// 固定する必要がある場合はこれを実行した値で固定
$hex_iv_string = bin2hex(openssl_random_pseudo_bytes(openssl_cipher_iv_length($method_name)));
$iv = hex2bin($hex_iv_string);
// 暗号化
$encrypt_bin = openssl_encrypt(
$target_string,
$method_name,
$key_string,
OPENSSL_RAW_DATA,
$iv
);
$hex_encrypt_string = bin2hex($encrypt_bin);// バイナリを16進数に変換
// 復号
$decrypt_string = openssl_decrypt(
hex2bin($hex_encrypt_string),// 16進数をバイナリに変換
$method_name,
$key_string,
OPENSSL_RAW_DATA,
$iv
);
var_dump($target_string);
var_dump($encrypt_hex_string);
var_dump($decrypt_string);
string(27) "暗号化したい文字列"
string(64) "c327a6ce0bc8e8b88078652dc4a8ce29d1da36444f8cce45340639104c6f04e0"
string(27) "暗号化したい文字列"
$target_string = '暗号化したい文字列';
$method_name = 'AES-256-CBC';
$key_string = 'キー文字列';
// 固定する必要がある場合はこれを実行した値で固定
$hex_iv_string = bin2hex(openssl_random_pseudo_bytes(openssl_cipher_iv_length($method_name)));
$iv = hex2bin($hex_iv_string);
// 暗号化
$encrypt_bin = openssl_encrypt(
$target_string,
$method_name,
$key_string,
OPENSSL_RAW_DATA,
$iv
);
$base64_encrypt_string = base64_encode($encrypt_bin);// バイナリをbase64エンコード
// 復号
$decrypt_string = openssl_decrypt(
base64_decode($base64_encrypt_string),// base64デコードしてバイナリに変換
$method_name,
$key_string,
OPENSSL_RAW_DATA,
$iv
);
var_dump($target_string);
var_dump($base64_encrypt_string);
var_dump($decrypt_string);
string(27) "暗号化したい文字列"
string(44) "TVg7Xt1Z0PHTmzhCTVEMukvU7nHtgDSfz/qCiqs5/lI="
string(27) "暗号化したい文字列"