Почему моя подпись закрытого ключа Java не совпадает с моей подписью Openssl? - PullRequest
0 голосов
/ 19 апреля 2019

Так что подпись, которую я получаю от 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 / д / 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 + А =

1 Ответ

1 голос
/ 31 мая 2019

Скорее всего, ваша проблема связана с использованием echo для подготовки ввода для вашей функции подписи.По умолчанию echo добавляет символ новой строки ко всем выводам, и представляющий его байт портит подпись.

Попробуйте echo -n, который пропускает символ новой строки и проверяет, работает ли он.

...