【问题标题】:Public key from private key in java is incorrectjava中私钥中的公钥不正确
【发布时间】:2016-05-17 13:09:46
【问题描述】:

我只有一个私钥,我需要在 java 中从中计算出公钥。按照这个答案Get public key from private in 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);

但是,如果我将代码的输出与 EC2 存储在 .ssh/authorized 密钥中的公钥进行比较,结果就不一样了。我做错了什么?

我要实现ssh-keygen -y

【问题讨论】:

    标签: java cryptography private-key public-key ssh-keygen


    【解决方案1】:

    您生成的密钥在X.509 format 中。而 .ssh/authorized_keys2 中的密钥位于 SSH format 中。您可以使用 ssh-keygen 实用程序进行转换:

    ssh-keygen -i -m PEM -f key.pem > ssh.pub
    

    【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2016-10-09
    • 2016-03-27
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多