栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从Java生成与ssh兼容的id_rsa(.pub)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从Java生成与ssh兼容的id_rsa(.pub)

ssh使用的密钥格式在RFC#4253中定义。RSA公钥的格式如下:

  string    "ssh-rsa"  mpint     e   mpint     n 

所有数据类型编码均在RFC#4251的#5部分中定义。字符串和mpint(多精度整数)类型的编码方式如下:

  4-bytes word: data length (unsigned big-endian 32 bits integer)  n bytes     : binary representation of the data

例如,字符串“ ssh-rsa”的编码为:

  byte[] data = new byte[] {0, 0, 0, 7, 's', 's', 'h', '-', 'r', 's', 'a'};

编码公众:

   public byte[] enprePublicKey(RSAPublicKey key) throws IOException   {       ByteArrayOutputStream out = new ByteArrayOutputStream();              byte[] sshrsa = new byte[] {0, 0, 0, 7, 's', 's', 'h', '-', 'r', 's', 'a'};       out.write(sshrsa);              BigInteger e = key.getPublicExponent();       byte[] data = e.toByteArray();       enpreUInt32(data.length, out);       out.write(data);              BigInteger m = key.getModulus();       data = m.toByteArray();       enpreUInt32(data.length, out);       out.write(data);       return out.toByteArray();   }   public void enpreUInt32(int value, OutputStream out) throws IOException   {       byte[] tmp = new byte[4];       tmp[0] = (byte)((value >>> 24) & 0xff);       tmp[1] = (byte)((value >>> 16) & 0xff);       tmp[2] = (byte)((value >>> 8) & 0xff);       tmp[3] = (byte)(value & 0xff);       out.write(tmp);   }

要获得密钥的字符串表示形式,只需在base64中编码返回的字节数组即可。

对于私钥编码,有两种情况:

  1. 私钥不受密码保护。在那种情况下,私钥根据PKCS#8标准进行编码,然后使用base64进行编码。它可以通过打电话来获得私钥的PKCS8编码
    getEnpred
    RSAPrivateKey
  2. 私钥受密码保护。在这种情况下,密钥编码是OpenSSH专用格式。我不知道是否有任何格式的文档(当然,OpenSSH源代码除外)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号