1
我有以下的公钥(作为一个例子):如何将RSA公钥转换为Java中的ssh-rsa公钥?
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjKAmiieDC6SEYpxdI5Kn
iRUmUwE5EQL2nyDNDrV4dpC28mIcvKlCHWrq8YL7vpKya5GRUYl5xFNoB73s0UGn
8AtZBlG82/vbAPI5g9OoF2Df+0PusG5da+yFZXJNIyx1Kmgp4Ca4BR4WHGYo2LiW
zvhjCi9OBO6ERFrlCX1tGCI8mVxo54PzSMbo6LxYmJcJgUneVERjmQe1+tvggeP5
J44xJB5ompRkXg3VEeqYiqC8RfU3cL2DxTLsQqz/ndtpyGwjd1VCreXZCveDJlHN
WDZHvaHIReJa4aQp93NZVLhhVl0sHF1QM/7RSrDvRK7CGAZKq8COQ3/F2zLpMOPM
PQIDAQAB
-----END PUBLIC KEY-----
我需要能够将其转换成我可以插入到SSH known_hosts文件的格式。例如:
localhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDj0HsJJ4I0p+gRYrpv3JFORk0NFB8YwlRdGBxja453pBzMBm6LyEmSqZAvv0UCguLI+Avo1HmDLJlrWd+1wVECRNSxD9twqcD5pkQcowy5hWOH0KbmBIdoYQqkm+nGhwSLSDJ5wO9k/F26D03d5/c0gNjB9UU9HrJ8zyB185vezxc6VM/kLlcoUMHT1aL/+cxbvlq5tkJDCmEQg05k4LgBWdfwUAXA1n3DlI9bU+CWb9hnmBUPFMHge56+Z1fhaJfvVW6VxLMh/W1NxK1Cxo4ig+0U0fYInqoMNcBT/6C7P2OdA8DbESCF5E7/9/eTLfsbW7EB7Ka3Mfyfm2a0Cswx
这两个公钥应该是一样的,我想。他们只是以两种不同的形式表达。 (对吧?)对于我的生活,我无法弄清楚如何做到这一点。
到目前为止,我正在从PEM文件加载一个私钥并像这样解析它。 PEMParser来自弹性城堡:
FileReader keyPairReader = new FileReader(new File(applicationPropertiesService.getConfigDir(), KEY_PAIR_FILE));
PEMParser parser = new PEMParser(keyPairReader);
然后我从解析器中获取公钥/私钥对。
PEMKeyPair pemKeyPair = (PEMKeyPair) parser.readObject();
从这里我能得到的SubjectPublicKeyInfo对象,我可以得到我的数据并将其编码为Base64:
String pkBase64 = new BASE64Encoder().encode(publicKey.getEncoded())
这让我在上面的第一个公共密钥以base64字符串。但是,对于我的生活,我无法弄清楚如何获得ssh-rsa格式。
任何帮助,将不胜感激。
谢谢!
看一看[这里](http://stackoverflow.com/questions/3588120/given-a-java-ssh-rsa-publickey-how-can-i-build-an-ssh2-public-key) – 2014-10-02 21:23:24
不幸的是,那根本不会返回正确的值。我得到字节数组,base64-ify它,并且它不符合预期的结果。这是正确的长度和前31个字符匹配,但其余的不是。我假设前31个是由于sha-rsa被预先添加到字节数组中。 – 2014-10-02 22:10:25