为什么00在数据中断UTF-16编码/ OpenSSL



我正在开发一个PHP登录,该登录需要一个ID,并在用户已经经过身份验证后将其登录到其他地方。它适用于除三个ID外的所有ID,并且它们都有一些共同点:它们都以两个0开头(例如:0012)。

我想知道双零是否在编码中占有特殊位置,如分隔符?或者与OpenSSL有关?它只在这三种情况下断裂。不管我是将数据作为字符串还是整数来处理,它都会破坏这两种方式。什么好主意吗?

代码(稍作修改):

            $fp = fopen("/OpenSSL-Win64/bin/myrsakey.pem", "r");
            $priv_key = fread($fp, 8192) or die("File not found."); 
            fclose($fp);
            $pkeyid = openssl_get_privatekey($priv_key);
            $data = '0012'; // THIS DOESN'T WORK
            $data = '0123'; // THIS DOES WORK
            $data = '1234'; // THIS ALSO WORKS
            $data = mb_convert_encoding($data, "UTF-16LE");
            openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_SHA1); 
            openssl_free_key($pkeyid); 

为什么00在数据中断UTF-16编码/OpenSSL?

OpenSSL的问题是不是。OpenSSL只处理数据——它不关心编码。它可能和openssl_sign有关。但现在还很难说。

您的问题可能与mb_convert_encoding有关。但是,你从来没有说明实际的问题是什么。

为什么不工作?在Linux系统上验证签名是否无效?您是否检查了字节顺序标记(BOM)的存在(或不存在)?

最新更新