我正在开发一个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)的存在(或不存在)?