Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用openssl libcrypto解析新的openssh-key-v1格式_Ssh_Openssl_Private Key_Openssh_Libcrypto - Fatal编程技术网

使用openssl libcrypto解析新的openssh-key-v1格式

使用openssl libcrypto解析新的openssh-key-v1格式,ssh,openssl,private-key,openssh,libcrypto,Ssh,Openssl,Private Key,Openssh,Libcrypto,我需要使用openssl(libcrypto)将SSH私钥~/.SSH/id\u rsa解析为EVP\u PKEY*或rsa*密钥。直到最近,该文件还将以易于解析的标准PEM或PKCS1格式存储。然而openssh已经切换到一种更复杂的新格式 结构是PEM编码的,它看起来像这样(使用ssh-keygen生成) 第一步是使用PEM_read_bio解析文本,这将去除PEM头并对数据进行base64解码。但目前还不清楚如何从规范中解析结构 前15个字节被固定为openssh-key-v1\0,但从那

我需要使用openssl(libcrypto)将SSH私钥
~/.SSH/id\u rsa
解析为
EVP\u PKEY*
rsa*
密钥。直到最近,该文件还将以易于解析的标准PEM或PKCS1格式存储。然而openssh已经切换到一种更复杂的新格式

结构是PEM编码的,它看起来像这样(使用
ssh-keygen
生成)

第一步是使用
PEM_read_bio
解析文本,这将去除PEM头并对数据进行base64解码。但目前还不清楚如何从规范中解析结构


前15个字节被固定为
openssh-key-v1\0
,但从那里不清楚。

解析这些字节的最简单方法是避免自己解析它们,而是使用
ssh-keygen-p-m PEM-f~/.ssh/id_rsa
将密钥转换为PEM格式,然后按照常规使用OpenSSL解析

但是,如果你真的想弄脏你的手,那么你链接的协议描述事实上提供了你需要知道的大部分内容。缺失的(关键)信息包括:

  • 所有整数均为网络字节顺序
  • int
    为32位
  • 最关键的是,
    string
    类型是一个长度值元组,其中
    length
    是一个
    uint32
    表示下一个八位字节中有多少个组成字符串;及
  • 各种公钥类型(
    ssh-dss
    ssh-rsa
    ecdsa-sha2-*
    等)的格式记录在各种RFC中,您可以在
各种密钥类型的私钥部分的外推留给读者作为练习,因为我还没有弄清楚。在不久的将来,我的将有一个基于Ruby的实现,因为我需要为我自己的项目找到它,所以您可以从中获取参数顺序

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAnG3jyNb
SKSG19wHPhx2U1AAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDtmnNl2AFg
9faMuZ/U38tY3+pDrOa2yoiOLeXQI3044xNiMiGrRW03wzWsaNCcI8ZnEeSvzr2HUq0YFQ
QQ6MaQp8cZmoGkOSnwhLAscocZOaoZwoj85w2hybuSy9fc99FqKbJ201a0++2BhTw4Syhs
LT3AOs+Z0hHXZEVWAfBsOd4icLnChBdEAsIBzEObdGsZXHiOcVgvcbJ7UOuQCkiJV3RX+P
IvTzivPQ8IGmsgYUj5KSPjZg03/tr3ePItuFQZH2p85dQlbOLyhtMpx6M5ErCAesxuTN6z
kHKtfRNfYXoDOgd5EBIc9hLnmQtpn2EjfIk+yW+yTiv0pwNUhoeFAAAD0BHcM21NrYK7Pu
C4m79CfD3ZRMdKzG+hUqrV6bRC8qK/iTnt/E4GvEOIOqqoQMQp7PLRP5CkeWRp4Y0nmpsP
zoSlVLvpJ1o36pSSpF6ClmsviAXjujB4wqOp+vq9KqfQfJT+khq4u2EaKwzclpfwaUe2lT
t/UdUok4n8BGVZl6Hw3vF+a8XWpM3ZWxFJXNaQ1bklfYraKDR483I2KJX/hT1Y+Shrl7hd
faqfI8A71lV7qYwqyEMBgwsbNzDYUpICwAEGp00pbX7ahBgo3OIL8Ay1LTbVRyZqMZGGSy
Ay4+WD5cgzU1sb7Z7XnKeRdEWyYUezvzDLpwYsx5RjXIDECBOwbRexh0X0taJw9MIS1YtV
dXz+8PRelQSn7jMHTLa1ILhF95KQBBnqN8EAZEXPnX50b6tz1y7/U1PR/+OxaEGX960m25
2WoXfSRraA6lA2b28r4NT2/BWfYg+6RVu9AQOwdZNWs1fU4ZwnN3yf2w+xEJvvnrXFJrIv
Hy6riJOIB9kSFI314vqmipsMpm7eJK7S3TCi8O6npfkhKTsU1rK4MW+gYp3LKTa2/eUy9r
Rfdgg3dZfq4e51th/9g6SCfrLaDhqTVf7AThOSlmqIpW2A1+4WmuSqhplZhZV5QA0Dyg26
mPHMFTIKs6P2dzgqTkfFxpEici6BeTiSBuMjeKau2HI8r6VD8fcpkvcARPHncoZAdQbars
+e9FhyNMY+EVzun95FUjlbSAFCjGUN81/XPAd+PERTtg+Z1h+QEb1jlZO6l+L62SYXZQO7
jZa3euvFTUxh4GAuWMF4SM7HibTrnY3POD4y8pIWWFsS6xbDQPcy1BdgS4A4IeAXNFbFsX
U7xAwiA0QOnF2Qwc6rTIfR8KiDJ2pMPuSF3CsvuX1VuJZ4EvUFXImBAmet5ChXA2Gw2Gkf
vItgB70xjRVJUjqOE1FE8Qb61BWEvH9pQMIHt59ldrcnLycOFmBIvWiCLyEb5s+asMsqui
GoMowxdmaM+tkNsJIWFqKviaqHL51ZxzWfZ5C8RIrC1bBjCPdHd+T6iQifNS1vJhgEPuG/
iI9R2aFMdz69CVnWJzhtTEvJFsBNiM1rKTXXFm00rCZozKM6xVaiDodgL5s3FxVr17WTMH
FaFMCH7JNAJMCR7080IuABHFubE2UyeCV6WxUgDpeGzLGOLXmLlrpyB5DHbkuNa8OohIDm
qW5yZcK4RoN1Foi4+tAs7qCJQAJBKFmwTc+5y6mQnq9s9jHQqBbyweHmK8VTHwiRpHbBv/
BQ3FL3t8pTZxv6msYq0+PUUZ3L8+k=
-----END OPENSSH PRIVATE KEY-----