代码之家  ›  专栏  ›  技术社区  ›  rsakhale

在phpseclib中使用指数和模生成签名

  •  1
  • rsakhale  · 技术社区  · 8 年前

    尝试使用生成明文签名 PHPSECLib

    $rsa = new \phpseclib\Crypt\RSA();
    $modulus = '3vDug4ykxU62V4fcIFMuqrd71H92LiyRhOsiNAMqRK40qj4RYdMIXYGmqZq7oBXJ3GNQEBNqZ2t4D5004wY35yPx6LVFU54No6SdoE4E1fUB5gLrLAUcil0b-k_KN9gJNndcfYyUIKwRJywUQda35pwiTI1tvE41_Lk6HGOLtSauh7ichwgghbCZFzc_Gx0XWrBUXWhYCCW2_CTPWWqfhNI7qMJvBqfmoOunMD_pIozrkGUx6dgaIjbaICBJCEheFFiwHqYRUOXHCHxsKRBzHx-5vlsedj5HnI3FMOF9yNbafwk_SfPZQrZC0T7OwQzOmj9IngRGOmg3lwuDlSCcwQ';
    $exponent = 'AQAB';
    $public = [
        'n' => new \phpseclib\Math\BigInteger($modulus, 16),
        'e' => new \phpseclib\Math\BigInteger($exponent, 16),
    ];
    $rsa->loadKey($public);
    $text = 'RohanSakhale';
    $signature = $rsa->sign($text);
    var_dump($signature);
    

    在这里得到空签名,请建议这里的错误步骤。

    1 回复  |  直到 8 年前
        1
  •  3
  •   neubert    8 年前

    BigInteger 构造器是16岁 BigInteger 假设字符串是十六进制编码的数字。但是您的字符串不是十六进制编码的-它们是base64编码的。模量的第二个特征是 v 例如这不是有效的十六进制字符。尝试以下操作:

    $rsa = new \phpseclib\Crypt\RSA();
    $modulus = '3vDug4ykxU62V4fcIFMuqrd71H92LiyRhOsiNAMqRK40qj4RYdMIXYGmqZq7oBXJ3GNQEBNqZ2t4D5004wY35yPx6LVFU54No6SdoE4E1fUB5gLrLAUcil0b-k_KN9gJNndcfYyUIKwRJywUQda35pwiTI1tvE41_Lk6HGOLtSauh7ichwgghbCZFzc_Gx0XWrBUXWhYCCW2_CTPWWqfhNI7qMJvBqfmoOunMD_pIozrkGUx6dgaIjbaICBJCEheFFiwHqYRUOXHCHxsKRBzHx-5vlsedj5HnI3FMOF9yNbafwk_SfPZQrZC0T7OwQzOmj9IngRGOmg3lwuDlSCcwQ';
    $exponent = 'AQAB';
    $public = [
        'n' => new \phpseclib\Math\BigInteger(base64_decode($modulus), 256),
        'e' => new \phpseclib\Math\BigInteger(base64_decode($exponent), 256),
    ];
    $rsa->loadKey($public);
    $text = 'RohanSakhale';
    $signature = $rsa->sign($text);
    var_dump($signature);