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