我正在进行PHP登录,该登录会获取ID并在用户已经过身份验证后将其记录在其他位置。它适用于除了其中三个之外的每个ID,它们都有一些共同之处:它们都以两个零开头(例如: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);
答案 0 :(得分:0)
为什么数据中的00会破坏UTF-16编码/ OpenSSL?
OpenSSL的问题是不。 OpenSSL只适用于数据 - 它不关心编码。它可能与openssl_sign
有关。但目前很难说清楚。
您的问题可能与mb_convert_encoding
有关。但是,你从未说明实际问题是什么。
它怎么行不通?在Linux系统上验证签名时它不起作用吗?您是否检查过字节订单标记(BOM)的存在(或不存在)?这是一个真正的问题,尤其是在使用Java时。