PHP RSA 签名变量未验证

PHP RSA Signature Variable Not Verifying

我有两个功能。一个函数为某些数据生成签名。另一个函数验证数据的签名。我面临的问题是验证不 return 正确。我正在使用 phpseclib 库 http://phpseclib.sourceforge.net/rsa/2.0/examples.html

    public function generate(){
    $rsa = new RSA();
    /*$rsa->setPublicKeyFormat(RSA::PRIVATE_FORMAT_PKCS1);
    extract($rsa->createKey());
    return "$publickey\r\n\r\n$privatekey";*/

    $rsa->loadKey(base64_decode(env('RSA_PRIVATE_KEY')));

    $data = 'hello';

    $rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
    $signature = $rsa->sign($data);

    return base64_encode($signature);

}

public function verify(Request $request){
    $rsa = new RSA();

    $data = 'hello';

    $signature = 'HTwI8TU9tIGBSUOWxCI95oILWxdnY9K9rizZbusQMM5+vlD4IiFuU5YghWnRTO+zB4GKUxhOcEaf127X5Hs7m4M76etol7dxxxkFw8097OWuU+bh2YskFB2GLWjzRdamg7RyWYznlePyBlPH8QeBHiRMvHHivabGOmNTkgsF09E=';

    $rsa->loadKey(base64_decode(env('RSA_PUBLIC_KEY'))); // public key
    return $rsa->verify($data, base64_decode($signature)) ? 'verified' : 'unverified';

}

如果我像这样将两个函数组合成一个函数,它就可以正常工作。

    $rsa = new RSA();
    /*$rsa->setPublicKeyFormat(RSA::PRIVATE_FORMAT_PKCS1);
    extract($rsa->createKey());
    return "$publickey\r\n\r\n$privatekey";*/

    $rsa->loadKey(base64_decode(env('RSA_PRIVATE_KEY')));

    $data = 'hello';

    $rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
    $signature = $rsa->sign($data);

    $signature = base64_encode($signature);

    $rsa->loadKey(base64_decode(env('RSA_PUBLIC_KEY'))); // public key
        return $rsa->verify($data, base64_decode($signature)) ? 'verified' : 'unverified';

我不明白。我测试了很多方法,签名相同但不验证。我正在尝试在一个 API 端点上签名并在另一个端点上进行验证。

在你的 verify 函数中你没有这样做:

$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);

您是在 generate 函数而不是 verify 函数中执行此操作。

在您的组合函数中,使用了相同的签名模式,因为使用了相同的对象。