【问题标题】:Private Key sign data in Java to PHPJava中的私钥签名数据到PHP
【发布时间】:2020-10-07 13:59:13
【问题描述】:

我必须编写 PHP 程序来执行与 java 签名函数相同的功能,如下所示

public static String sign(byte[] data, String privateKey) throws Exception {
          MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
          messageDigest.update(data);
          byte[] hashData = messageDigest.digest();
          
          StringBuffer hexString = new StringBuffer();
          
          byte[] keyBytes = Base64Utils.decode(privateKey.getBytes()); 
          PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);

          KeyFactory keyFactory = KeyFactory.getInstance("RSA");
          PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
          Signature signature = Signature.getInstance("NONEWithRSA");
          signature.initSign(privateK);
          signature.update(hashData);
          byte[] sign = signature.sign();
          return Base64.getEncoder().encodeToString(sign);
}

我在google上做了一些研究,并尝试编写如下的PHP代码

public function sign($data, $privateKeyString){

     $privateKey = openssl_pkey_get_private($privateKeyString);
     $hashData = hash("sha256",$data);
     openssl_sign($hashData, $signature, $privateKey);
     openssl_free_key($privateKey);
     return base64_encode($signature);

}

我尝试将相同的密钥与数据一起传递给函数和测试,让我们说“你好” 哈希数据是映射,但结果签名不同

有没有人能看出是什么原因导致 java 和 php 返回的 base64 签名不同?

【问题讨论】:

  • 弄清楚主要问题应该是我在Java中找不到可以支持NONEwithRSA的PHP签名算法,有没有人知道是否有任何替代方案可以满足它?跨度>

标签: java php private-key


【解决方案1】:
public function sign($data, $privateKeyString){

     $privateKey = openssl_pkey_get_private($privateKeyString);
     $hashData = openssl_digest("sha256",$data);
     openssl_private_encrypt($hashData, $signature, $privateKey);
     openssl_free_key($privateKey);
     return base64_encode($signature);

}

由于需要将哈希值转换为十六进制字符串而不是原始值,因此最终通过使用 openssl_digest "sha256" 而不是将 sha256 哈希值传递给私钥加密来解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多