Пожалуйста, что я делаю плохо, что результат следующих java и bash не соответствует?
Вот аналогичная тема. Я смог легко написать java (который фактически обсуждается там), но никто не беспокоился о результатах. Для меня, просто, оба результата разные.
Вот часть java, которую я использую (файл pem без пароля):
Security.addProvider(new BouncyCastleProvider());
PEMParser pemParser = new PEMParser(new BufferedReader(new FileReader(pemPath)));
Object object = pemParser.readObject();
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
KeyPair kp = converter.getKeyPair((PEMKeyPair) object);
PrivateKey privateKey = kp.getPrivate();
Signature sig = Signature.getInstance("RSA");
sig.initSign(privateKey);
sig.update(stringToSign.getBytes());
byte[] bytes = sig.sign();
return new String(Base64.encode(bytes)); //+ close pemParser
Код Bash:
printf $(printf "${string_to_sign}" | openssl rsautl -sign -inkey "${pem_path}" | openssl enc -base64 | awk '{printf "%s", $0}' )
Возможно, слишком поздно, но если я прочитаю http://www.openssl.org/docs/apps/rsautl.html
rsautl, поскольку он использует алгоритм RSA напрямую, может использоваться только для подписи или проверки небольших фрагментов данных.
Так что это делает сырец подпись без дайджеста, так что я думаю, вы должны использовать NONEwithRSA
(см http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html)