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

Go中以下命令的等价物是什么?


openssl genrsa -des3 -passout pass:mypassword -out myfile.key 2048

我目前所拥有的...


package main


import (

    "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: ?,

  })


  // ...

}


慕后森
浏览 88回答 1
1回答

慕田峪4524236

您缺少的主要内容是x509.EncryptPEMBlock函数,该函数可用于使用多种密码之一进行加密,包括 3DES。以下是生成密钥、使用 3DES 加密并将其写入文件的示例代码:package mainimport (  "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,ENCRYPTEDDEK-Info: DES-EDE3-CBC,627721fef197aa1fY5BPGXBnrTXgSPfWGl04f9FNJAB8tlzOF3MBUJaZBBb+3sOWWfz43RikFuXowl3sDWOjNv9TnHO1M5Tlxye84iywo8CqINCZzMfan3J8ZxKWHpXbs5DVXQ9INTPfLueq...QuUylrQNEWt0T1BlKRltAkoRawiBj7Ys/WMnto9dfEbJPeoHfGCp0xTSYSvIwE01rYrebCfNdrb8gW4KlQnOCj0bHU6xDtLzMtt6i9JD4CtXGKBo8mYwng==-----END RSA PRIVATE KEY-----忠告:3DES 被认为是弱密码。您应该改用 AES(提供多种密钥大小)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go