我在编写openssl_encrypt
的代码中犯了一个错误来解密我的密码并且它有效。所以也许是一个愚蠢的问题,但它是同一个功能?
这是测试代码:
$algo = 'AES-256-CTR';
$key = "1P4s5W0rd_or_4nyTh1ng_3L53";
$ivlen=openssl_cipher_iv_length($algo);
$iv = openssl_random_pseudo_bytes($ivlen);
$data="test";
$b64data=base64_encode($data);
$encdata = openssl_encrypt($b64data,$algo,$key,OPENSSL_RAW_DATA,$iv);
$b64decdata = openssl_encrypt($encdata,$algo,$key,OPENSSL_RAW_DATA,$iv);
$decdata=base64_decode($b64decdata);
print "<br>data: $data";
print "<br>encdata: $encdata";
print "<br>decdata: $decdata";
print "<br>";
print "<br>key: $key";
print "<br>iv: $iv";
哪个印刷品:
data: test
encdata: ��v�>u
decdata: test
key: 1P4s5W0rd_or_4nyTh1ng_3L53
iv: �|t,ԏ�&6�����
那么我的错误是什么? gremlin在哪里?
答案 0 :(得分:0)
CTR模式下的加密和解密是相同的,算法根据与数据进行异或的密钥和计数器(iv)生成数据流。给定相同的密钥和计数器,生成相同的数据流,因此加密和解密是相同的操作。
有关详细信息,请参阅CTR Mode,请注意图中 encryption 用于加密和解密。