【发布时间】:2020-03-27 10:03:10
【问题描述】:
我正在使用https://github.com/phpseclib/phpseclib 来生成签名。但是当我用我的 RSA 私钥生成签名时,它会生成签名,但当我用我的公钥验证时它也会给我unverified。
这是我的代码:
<?php
// Include library
include('Crypt/RSA.php');
// Create an Instance
$rsa = new Crypt_RSA();
$hash = new Crypt_Hash('sha256');
$data = array(
"name" => "hello"
);
$data = json_encode($data, true);
// Load Private Key
$rsa->loadKey('-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAlwK9IAETYwSW6p0hVEue3+WyMtRW5MA3BS2Bzf3B0Qimnvfl
....
-----END RSA PRIVATE KEY-----');
// Message to be signed
$plaintext = $data;
// Set signing signature
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
$hashed = $hash->hash($plaintext);
$encrypted = $rsa->sign($hashed); // Sign Data
$signature = base64_encode($encrypted); // Encode to base64 the signed Data
echo $signature;
$rsa->loadKey('-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlwK9IAETYwSW6p0hVEue
.....
-----END PUBLIC KEY-----'); // public key
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
现在上面的代码生成签名但不正确。
在此之后,我尝试BouncyCastle lib 仅在 .NET 中使用上述密钥生成签名。它生成了完美的签名并经过验证。
我不知道phpseclib lib 有什么问题。我也直接尝试使用 openssl 生成,但仍然没有生成正确的。
【问题讨论】: