我只有一个私钥,我需要在java中计算它的公钥。继这个答案Get public key from private in Java我想出了下面的代码:java中私钥的公钥不正确
String pemString = "full private key string here";
pemString = pemString.replace("-----BEGIN RSA PRIVATE KEY-----\n", "");
pemString = pemString.replace("-----END RSA PRIVATE KEY-----", "");
pemString = pemString.replace("\n", ""); //without this exception: Illegal base64 character a
logger.info(pemString);
byte[] decoded = Base64.getDecoder().decode(pemString);
KeyFactory kf = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded);
PrivateKey privatekey = kf.generatePrivate(keySpec);
RSAPrivateCrtKey privk = (RSAPrivateCrtKey)privatekey;
RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(privk.getModulus(), privk.getPublicExponent());
PublicKey pubKey = kf.generatePublic(publicKeySpec);
String pubString = Base64.getEncoder().encodeToString(pubKey.getEncoded());
logger.info(pubString);
但如果我比较代码的输出与公共密钥在的.ssh /授权密钥EC2店是不一样的。我究竟做错了什么?
我想实现ssh-keygen -y
接受你的答案,因为它指出了实际的问题。管理直接在java中进行格式转换http://stackoverflow.com/questions/3706177/how-to-generate-ssh-compatible-id-rsa-pub-from-java – cen