问题描述
我在使用openssl_decrypt函数解密十六进制字符串时遇到问题。它返回奇怪的字符。
功能是这样的:
$ params_decrypt = openssl_decrypt ($ params_hex,"DES-EDE3-CBC","e238a0d8c9d82a8083b878e2fafc76216d3d0776a63bdf39",OPENSSL_ZERO_PADDING,"cca6662d330");
echo "<br> <br> string_decrypt4345643xxxxYaEs <br> <br>". $ params_decrypt;
在为UTF-8配置的网页上返回此值
��Q���r�84fڱh�x^X�C#�...-〜īx�� G%E-]}ȥ[�ڱ/��P7。 s.y。({w����5SmK��!Q��6��1��:�4����]�����_5s�p&Mִ�R�rlI욎���A/N�2����J^{����vsb ��\�.�D��!�
。@@ Ds。}��^�Z$ c $ʼn����֬。eЏD。'.. h $��oM)��z@v��-�,l��VNrP�Ӝ���y��=�,{�n:Jū$��p֭�e�!t�r ��6'?oV�Ʈ)。“ I.(�[���D?��D?��9&r�]�A��5��Dj�L�d��ʾ�*������R���X������6�����bi�g�θo���}Y��W}\�"��
Ise�� kH淭���S�f[�m9s��:�ū G5՜Ng0U��$ yr = A.G.s(5.v.iQ.l.lWT.ge.k��7��X��: �P_X�i�&7�|v�����@�UU�%%o.YW13�Z��n��K'A�~�蝷�$。 ��������$ ??!�| 4〜���〜���jF��*���fI�Tkvd[������Ӫ�>��?j4(ܘ ��%t���Ҝ�0쥟��D�
致谢。
解决方法
已解决。
我忘记了将十六进制值转换为字符串。
$data = urlencode($_GET["PARAM"]);
$method = "DES-EDE3-CBC";
$key = "e238a0d8c9d82a8083b878e2fafc76216d3d0776a63bdf39";
$iv = "cca6662d3304033c";
$options = 0;
// transform the key from hex to string
$key = pack("H*",$key);
// transform the iv from hex to string
$iv = pack("H*",$iv);
// decrypt
$dec = openssl_decrypt(urldecode($data),$method,$key,$options,$iv);
致谢。