【发布时间】:2014-05-08 14:29:39
【问题描述】:
我正在开发一个 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);
【问题讨论】:
-
旁注:您可以使用
$priv_key = openssl_pkey_get_private("file:///OpenSSL-Win64/bin/myrsakey.pem");简单地加载您的私钥 -
开头的双零是唯一能将这些 ID 与其他 ID 区分开来的东西吗?或者那些通常是唯一以零开头的?
-
还有很多其他的ID,它们可以是4个数字的任意组合(例如:1234、2454)。它只在以 00 开头的 ID 上中断。所有其他数据都相同。
-
openssl_verify在创建签名后立即使用以00开头的$data上的公钥成功了吗? -
是的,无论如何它都会返回true。