为什么open_ssl函数使用DES-EDE3-CBC返回奇怪的字符?

问题描述

我在使用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);

致谢。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...