为了账号安全,请及时绑定邮箱和手机立即绑定

使用三重 DES 加密创建 RSA 私钥

使用三重 DES 加密创建 RSA 私钥

Go
慕后森 2022-06-27 16:56:23
Go中以下命令的等价物是什么?openssl genrsa -des3 -passout pass:mypassword -out myfile.key 2048我目前所拥有的...package mainimport (    "crypto/des"    "crypto/rand"    "crypto/rsa"    "encoding/pem")func main() {  key, _ := rsa.GenerateKey(rand.Reader, 2048)  // Do something with des.NewTripleDESCipher(...)?  keyPem := pem.EncodeToMemory(&pem.Block{    Type:  "RSA PRIVATE KEY",    Bytes: ?,  })  // ...}
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您缺少的主要内容是x509.EncryptPEMBlock函数,该函数可用于使用多种密码之一进行加密,包括 3DES。


以下是生成密钥、使用 3DES 加密并将其写入文件的示例代码:


package main


import (

  "crypto/rand"

  "crypto/rsa"

  "crypto/x509"

  "encoding/pem"

  "io/ioutil"

)


func main() {

  // Generate a 2048 bit RSA key.

  key, err := rsa.GenerateKey(rand.Reader, 2048)

  if err != nil {

    panic(err)

  }


  // Marshal it into DER-encoded ASN.1 format.

  raw := x509.MarshalPKCS1PrivateKey(key)


  // Encrypt using 3DES and password "mypassword".

  block, err := x509.EncryptPEMBlock(rand.Reader, "RSA PRIVATE KEY", raw, []byte("mypassword"), x509.PEMCipher3DES)

  if err != nil {

    panic(err)

  }


  // Encode the block into PEM.

  encoded := pem.EncodeToMemory(block)


  // Write it out.

  err = ioutil.WriteFile("myfile.key", encoded, 0400)

  if err != nil {

    panic(err)

  }

}

生成的文件是:


-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,627721fef197aa1f


Y5BPGXBnrTXgSPfWGl04f9FNJAB8tlzOF3MBUJaZBBb+3sOWWfz43RikFuXowl3s

DWOjNv9TnHO1M5Tlxye84iywo8CqINCZzMfan3J8ZxKWHpXbs5DVXQ9INTPfLueq

...

QuUylrQNEWt0T1BlKRltAkoRawiBj7Ys/WMnto9dfEbJPeoHfGCp0xTSYSvIwE01

rYrebCfNdrb8gW4KlQnOCj0bHU6xDtLzMtt6i9JD4CtXGKBo8mYwng==

-----END RSA PRIVATE KEY-----

忠告:3DES 被认为是弱密码。您应该改用 AES(提供多种密钥大小)。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信