加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用golang ssh加密的私钥

发布时间:2020-12-16 19:22:19 所属栏目:大数据 来源:网络整理
导读:我很感激指针,因为我无法解决如何解密加密密钥以便与golang ssh一起使用它.我正在尝试将两个其他代码源(包括 this个)混合在一起但无法使其工作. 我想我正在使用DER,但需要将其编组回PEM以便将其与crypto / ssh一起使用 -----BEGIN RSA PRIVATE KEY-----Proc-
我很感激指针,因为我无法解决如何解密加密密钥以便与golang ssh一起使用它.我正在尝试将两个其他代码源(包括 this个)混合在一起但无法使其工作.

我想我正在使用DER,但需要将其编组回PEM以便将其与crypto / ssh一起使用

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,D7C72273BE168626E5B2D1BC72E56326
...
-----END RSA PRIVATE KEY-----

我读了它:

key,err := ioutil.ReadFile(privateKey)
if err != nil {
    log.Fatalf("Unable to read private key: %v",err)
}

使用未加密的(!)键,我可以:

signer,err := ssh.ParsePrivateKey(key)
if err != nil {
    log.Fatalf("Unable to parse private key: %v",err)
}

config := &ssh.ClientConfig{
    User: username,Auth: []ssh.AuthMethod{
        ssh.PublicKeys(signer),},}

这会奏效.

我重用了一些代码,我认为解密后的PEM作为DER:

func decrypt(key []byte,password []byte) []byte {
    block,rest := pem.Decode(key)
    if len(rest) > 0 {
        log.Fatalf("Extra data included in key")
    }
    der,err := x509.DecryptPEMBlock(block,password)
    if err != nil {
        log.Fatalf("Decrypt failed: %v",err)
    }
    return der
}

但是,我如何从DER到签名者?

或者,解决这个问题的最佳方法是什么?

如果您有带RSA私钥的DER块,则使用x509.ParsePKCS1PrivateKey来解析密钥,使用ssh.NewSignerFromKey来获取ssh.Signer
key,err := x509.ParsePKCS1PrivateKey(der)
if err != nil {
    log.Fatal(err)
}
signer := ssh.NewSignerFromKey(key)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读