【问题标题】:Why Does My Java Private Key Signature Not Match My Openssl Signature?为什么我的 Java 私钥签名与我的 Openssl 签名不匹配?
【发布时间】:2019-04-18 21:39:44
【问题描述】:

所以我从 Java 中获得的签名与我在 openssl 中获得的签名不匹配。这是我正在做的一个例子:

在使用 openssl 的终端中,我正在这样做。

    echo +pkCdYME5SzI7A2PV0r8/8FqYGZyvTp+4DoGkdaMYRs= hash
    openssl dgst -sha256 -sign "private.key" -out hash.sha256 hash
    base64 < hash.sha256 > hash.bin
    cat hash.bin
    results posted below

Java 代码:(哈希与我用于 openssl 的哈希匹配)

    private String createSignature(String hash) throws ProductException {
      try {
        Signature privateSignature = Signature.getInstance("SHA256withRSA");
        privateSignature.initSign(getPrivateKey());
        privateSignature.update(hash.getBytes(UTF_8));
        byte[] signature = privateSignature.sign();
        String result = Base64.encodeBase64String(signature);
        System.out.println(result); //THIS RESULT SHOULD MATCH BUT DOESN'T
        return result;
      } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) {
        throw new ProductException(Codes.AUTHENTICATION_ERROR, e);
      }
    }   
    private PrivateKey getPrivateKey() throws ProductException {
      try {
        String key = IOUtils.toString(this.getClass().getResourceAsStream("private.key"));
        PemObject pem = new PemReader(new StringReader(key)).readPemObject();
        byte[] content = pem.getContent();
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(content);
        return keyFactory.generatePrivate(ks);
      } catch (IOException | NoSuchAlgorithmException | InvalidKeySpecException e) {
        throw new ProductException(Codes.AUTHENTICATION_ERROR, e);
      }
    }

请帮忙!我已经搜索了互联网,但我不知道我做错了什么。

我的 openssl 签名 = O8DRek17ySzz + p2N8brH / 9CdY3b + GN5bnyaTtn + ZP3SDIBvtqkk / LP + zb1BZ80a6xCIID8CTjNU + / svrV / Q / rXEqEQc3jk3ZVUo0RJB52rgW26EQWyieAdqRlIbQqPhaCIrpWrs + WImGk7cPnkTEueIm + EzxG8ptjF5cAZH3lustVLt8SM9sXjQJzxzMgF2g0XN + 1GQniAdWT / oNJXv0ZG7PSFACfcoSTSdN4wHkVAG4 / PF / D6H + M5eTkEu6NhXfbfBBtavGmBiDgM6FPFDJ4r + 2Rzvc / vpSiglUUQgxD58PTH47Y8xMc4t4 / yahrchi2if2cJ7e89RBb1IHNus + eB8zPS0MHBn2OWDUM66P1KRanwzebDfg08VhRbW8zVnmNUNzXxAdCWa3kwsDe7hx + 36oHfJwoyqIFwjJi8TKZm0JLKMf0SaLh / 6zK0bIdgoXw23AfJni1ewmUqZbpE6Q4A0TgxaJg1aozb06l7Nb523FqV6ScRZ0wJK3s51Dduy5j1V1jt0 + YYD + 0zACyYfr5a + vypEygzsZ2Rzu3Q/l4VoPlZF2dr50TLnbhTvFnyK9mvc0zaTmsuHI5UJAbcpFBTXiDWb0DoWo4PkHRVFPvIMai37UxW4c5V0ybchlQHrEKYQ8NigYHGX5j8GsFhZJgg73Het1YwoWdsz1PksoYTY=

我的 Java 签名 = 8dKc1otqL + thKQ7yTPeHX7T5fuOgv6PmHvlP5QyEHEXZILwD / 234polMSs20i4na9wCuUdcSA + mHEKpY7Dkyd8VLTcZZ8RC8AlPE5bvzXc / uZhyPpBuSA7mDDOARbg3mx5usq4ythdqxj6OvdOBAJXXFB6Jc / c1XVd8IxDnRJoz5MlwxZIp94TAyW11QbMGNZuzcbsdEdsBuXU1MR4gzVfMLJjMcIM3YTtsP3bktsPAs5W2Asp9lDg5GuIOgWgXpTlj3VY6NF64SCI1tY4LhE7zq16YXQ6ykJ490YSVX5J9z + cDvZcVgfvgKCZuk4wgnXo6PbE4Wm4FDuzu35DEQi9Y5EEHzXlb5aNFQP3S6lumyfqOCmZlQcNVS53ur1fY4P8cnOuHZelyYS1Dw54q0SDCjFuANK2Ltl8rIZOZQWbg6jo45HbpaHUgt1NMkmj / UC / rLSnofa / YYbcJ2YZbqUdyX / yTBlzEuLR0 / 4Bgv9zvBw8HI0h3icv7 / 1NYaKo / eBSki6HNyDh2pDWX6IHQTFMzdFKeoXVAQLfaJREIpMPu + rDExI6Ozl0r9D61fY + XtMrptGNTFzf1h4cwUAZAC737Ahc6qsr + jQkDWDJt6oJbgziNE4C2JZriRtvRDACpryt6MGH1QnYPGYfCVs / xSxaYEtGJsjRRkG + lkpojcJ + A = P>

【问题讨论】:

标签: java openssl signature sha256 private-key


【解决方案1】:

您的问题很可能来自使用 echo 准备对您的签名函数的输入。 默认情况下,echo 会在其输出中附加一个换行符,并且表示它的字节会混淆签名。

尝试跳过换行符的echo -n,看看它是否有效。

【讨论】:

  • 感谢您的回复!这很可能是我的问题。我终于让我的代码与我一起工作的集成商一起工作,但从来没有得到上面的例子来给我我想要的输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 2012-11-05
相关资源
最近更新 更多