PHPのopenssl_encrypt関数で暗号化したものをopensslコマンドで複合化
PHPのopenssl_encryptとopenssl
phpのopenssl_encrypt()で暗号化した文字列をopensslコマンドで複合化しないといけない案件があったのでメモ
エンコード条件
ivを指定してエンコードするのが定石だが、今回はivの指定がなかった。
$enc_key = "abcedfg";
$enc_method = "aes-256-cbc";
$text = "some encode text";
openssl_encrypt($text, $enc_method, $enc_key);
opensslで復号
openssl_encrypt()はIVの指定をしていない場合、key文字列と同じものが指定されるもよう
ポイント
- key文字列を16進数にしたものを-Kオプションに指定する
- ivは-Kオプションに指定した文字の先頭数文字が対応するみたい(文字数はmethod依存?)
/**
* 文字列を16進数に変換
* @param $x
* @return string
*/
function strtohex($x)
{
$s='';
foreach (str_split($x) as $c) $s.=sprintf("%02X",ord($c));
return($s);
}
$key = strtohex($enc_key);
$iv = substr($key, 0, 32); //$keyの先頭32文字で複合化できた
$cmd = sprintf('echo -n "%s" | openssl enc -d -%s -base64 -A -K %s -iv %s',
$custom_data, $key, $iv, $iv);
exec($cmd, $out);
echo $out;
Author And Source
この問題について(PHPのopenssl_encrypt関数で暗号化したものをopensslコマンドで複合化), 我々は、より多くの情報をここで見つけました https://qiita.com/o_kyohei/items/caa2dd33ed78a0ea0abf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .