###実現したいこと
opensslコマンドで生成した暗号文をPHPのopenssl_decrypt()で復号したいのですが上手く行きません。
暗号化には、aes-256-cbcを使用しています。
###発生している問題
・PHP : key, ivは算出できているが復号できない。
###該当のソースコード
BASH
1$ echo "rawdata" | openssl enc -e -aes-256-cbc -base64 -pass pass:password -p 2salt=420D3EFAD8B50CDA 3key=6DE400E56736822A64A0C714F15AD1917DB4EBE17A60305C37721488F03E7E40 4iv =F7D4A93D15A137F864866189F9D64DA1 5U2FsdGVkX19CDT762LUM2v9Er/lUtkGsle2RiY1nQdE=
上記で得た暗号文を事前に共有しておいたpass(password)で復号するプログラム
PHP
1<?php 2 $secret = "password"; // 事前に共有 3 $b64_send_data = "U2FsdGVkX19CDT762LUM2v9Er/lUtkGsle2RiY1nQdE="; 4 $send_data = base64_decode($b64_send_data); 5 6 // 'Salted__'+'salt 8byte'+'encrypt data' 暗号文からsaltを分離 7 $bin_salt = substr($send_data, 8, 8); 8 $hex_salt = bin2hex($bin_salt); 9 $encrypt = substr($send_data, 16); 10 11 // secretとsaltからkey, iv生成 EVP_BytesToKey()の簡易版 12 $hash1 = openssl_digest($secret . $bin_salt, 'md5'); 13 $hash2 = openssl_digest(hex2bin($hash1) . $secret . $bin_salt, 'md5'); 14 $key = $hash1 . $hash2; 15 $iv = openssl_digest(hex2bin($hash2) . $secret . $bin_salt, 'md5'); 16 17 $decrypt = openssl_encrypt($encrypt, 'aes-256-cbc', hex2bin($key), OPENSSL_RAW_DATA, hex2bin($iv)); 18 19 echo "salt=". $hex_salt ."<br>"; 20 echo "key=". $key ."<br>"; 21 echo "iv =". $iv ."<br>"; 22 echo "decrypt : ". $decrypt ." (". bin2hex($decrypt) .") " ."<br>"; 23 echo "openssl target : rawdata ". bin2hex("rawdata") ."<br>"; 24?> 25 26-- 実行結果 -- 27salt=420d3efad8b50cda 28key=6de400e56736822a64a0c714f15ad1917db4ebe17a60305c37721488f03e7e40 29iv =f7d4a93d15a137f864866189f9d64da1 30decrypt : (省略) (e253655c7f75cf721da65fc95a4405f2d5834766a63e693550ff1047d3d84956) 31openssl target : rawdata (72617764617461)
###実行情報
PHP 7.1.1 (cli) (built: Feb 13 2017 10:05:49) ( NTS )
php -S でビルトインサーバを立てて実行

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/01 12:20 編集