【问题标题】:Storing and retrieving RSA encryption key存储和检索 RSA 加密密钥
【发布时间】:2017-03-07 00:30:13
【问题描述】:

我正在尝试构建一个 API,但为了正确保护它,我相信我需要对存储在我的服务器上的私钥和客户端的公钥使用 RSA 加密。我已将生成的私钥存储到 JSON 文件中,我打算存储在我的服务器上,但要写入 JSON,我也需要转换类型 []byte。现在,当我尝试检索私钥以生成公钥时,它不会让我使用类型字节为*Publickey 我能想到的实现此目标的唯一另一种方法是为随机数生成器播种,这样我就可以在我的服务器上将种子作为秘密,然后我的私钥应该始终生成相同的东西,这将是任何帮助很棒。

package main

import (
    "bytes"
    "crypto/rand"
    "crypto/rsa"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
)

func main() {
    mimicPrivateKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    buf := new(bytes.Buffer)
    json.NewEncoder(buf).Encode(mimicPrivateKey)
    secrets, _ := os.OpenFile("secrets.json",    os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
    // Close the secrets file when the surrounding function exists

    secrets.WriteString(buf.String())
    secrets.Close()

    secrets, _ = os.OpenFile("secrets.json", os.O_RDWR, 0666)
    serverKey, _ := ioutil.ReadAll(secrets)
    if serverKey != nil {
        fmt.Println("can not open key")
    }

    serverKeyPublic := &serverKey.PublicKey
}

【问题讨论】:

    标签: json encryption go rsa decode


    【解决方案1】:

    你需要解组它:

    var data *rsa.PrivateKey
    err = json.Unmarshal(serverKey, &data)
    if err != nil {
        panic(err)
    }
    

    你可以使用

    err = ioutil.WriteFile("secrets.json", buf.Bytes(), 0666)
    

    serverKey, err := ioutil.ReadFile("secrets.json")
    

    见:

    package main
    
    import (
        "bytes"
        "crypto/rand"
        "crypto/rsa"
        "encoding/json"
        "fmt"
        "io/ioutil"
    )
    
    func main() {
        mimicPrivateKey, err := rsa.GenerateKey(rand.Reader, 2048)
        if err != nil {
            panic(err)
        }
        var buf bytes.Buffer
        err = json.NewEncoder(&buf).Encode(mimicPrivateKey)
        if err != nil {
            panic(err)
        }
        err = ioutil.WriteFile("secrets.json", buf.Bytes(), 0666)
        if err != nil {
            panic(err)
        }
    
        serverKey, err := ioutil.ReadFile("secrets.json")
        if err != nil {
            panic(err)
        }
        var data *rsa.PrivateKey
        err = json.Unmarshal(serverKey, &data)
        if err != nil {
            panic(err)
        }
        serverKeyPublic := data.PublicKey
        fmt.Println(serverKeyPublic)
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多