【问题标题】:PHP openssl_sign outputs weird charactersPHP openssl_sign 输出奇怪的字符
【发布时间】:2018-10-29 03:45:48
【问题描述】:

我正在尝试使用 openssl_sign 对文件进行签名。

我的代码:

$pkeyid = openssl_get_privatekey($priv_key); 

// compute signature
openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_SHA1);

Echo $signature;

// free the key from memory
openssl_free_key($pkeyid);

问题在于它输出的是奇怪的字符而不是 sha1 哈希。我究竟做错了什么? (我的 PHP 文件是 UTF8 编码的)

输出:

šòеcÔÝ”KÿLÍvÎ*q‡m—Xz¬ëNðñÆÒÐLÉ6вcTO¯à„ØæØSª?tšü T/ß‹‡,¤Sý³f¥Jª¥§š¯ŠqL¾ð›‹å-éuÇ–Öºþ¦ùn}"Ë?=~JTÃj)ŒÉ~^׆±ÍçÏZ5]þNÉÌOhÔMllCJY`k—W²IHrätv¨ôñ IµBÛÕBô€ŸIwèFd8 êÿ2äåçAØèÙtªˆÈÚ‡¹œ£šO.èiÿonE[ÑœZºZ @TpÉO•Ý~~ëq

期待类似的东西:

Ol2rr4oaPHxfQL4ER8Ck15OEr8D8Cn9iGcsjZ8ves2IG7WOFFm0WUyQDAN30trNvO7vRQF25Uosw/Aflx3bRB1ezQNSn6mPvTzU6CPuSC+BBddytOyRvoLPhJ4F910yE8mrKeIuz21un8Dobm3PnZiQr

PS:$data 包含我要签名的文本。私钥已正确加载,我手动将其放入我的文件中。 (它是pem格式的)

【问题讨论】:

  • 好吧,看来输出是二进制格式。我使用了 base64_encode,现在它输出了一些更合乎逻辑的东西。仍在运行一些测试。奇怪的是,它没有任何地方说...
  • 经过几次尝试后,我认为这不是 sha1 哈希。我仍然无法让它工作......有什么想法吗?

标签: php utf-8 openssl


【解决方案1】:

仅将您的字符串转换为

$signature = base64_encode($signtaure);
echo"The sring hash is;".$signature;

在保存动画或变量之前

SHA1 加密不是问题。

如果你想验证签名

$privateKeyPem = file_get_contents($folder.'private_key.pem');
               $publicKeyPem = file_get_contents($folder.'public_key.pem');

               $signature = file_get_contents($folder.'signature.dat');

                 $signature = base64_decode($signature);
                 //echo "the signature is: ".$signature; for verify your string
               if (openssl_verify($stringtosign, $signature, $publicKeyPem, 'sha256WithRSAEncryption') === 1) {
                   echo 'the sign is a valid sign ';

                 echo'<br> the generated hash is: '.$signature;
               } else {
                   echo 'the sign is invalid';
               }

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2023-03-10
    • 2018-07-22
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多