【问题标题】:Encrypt the message with the key使用密钥加密消息
【发布时间】:2022-01-28 11:06:04
【问题描述】:

我需要使用公钥加密消息“消息”并将其保存为文件 ciphertext.txt 通过将预先接收到的数据转换为 HEX 编码。我不需要生成公钥,我已经有一个现成的公钥。使用此公钥,您需要加密消息。 这是我能够做到的:

package main

import (
"crypto/rand" 
"crypto/rsa"
"crypto/sha256" 
"crypto/x509" 
"encoding/pem" 
"errors"
"log"
"os"
)

func main() {
publicKeyBytes, err := os.ReadFile("publicik.key")
if err!= nil {
    return
} 
publicKey, err := decodepublicKey(publicKeyBytes)
if  err != nil {
    return
}
plaintext := []byte("Message")
ciphertext, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, publicKey, plaintext, nil)
if err != nil {
    return
}
log.Printf( "%x", ciphertext)

privateKeyBytes, err := os.ReadFile("private.key")
if err != nil {
    return
}
privateKey, err := decodePrivateKey(privateKeyBytes)
if err != nil {
    return  
}
decryptedtext, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, privateKey,ciphertext, nil)
if  err != nil {
    return
}
log.Printf("%s", decryptedtext)
}

func decodepublicKey(key []byte) (*rsa.PublicKey, error) {
    block, _:= pem.Decode(key) 
    if block == nil {
    return nil, errors.New("can't decode pem block")
    }
    publicKey, err := x509.ParsePKCS1PublicKey(block.Bytes) 
    if err != nil {
    return nil, err
    }
    return publicKey, nil
    }

func decodePrivateKey(key []byte) (*rsa.PrivateKey,error) { block, _ := pem.Decode(key)
    if block ==  nil {
    return nil, errors.New("can't decode pem block")
    }
    privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) 
    if err != nil {
    return nil, err
    }
    return privateKey, nil
}

那我不知道怎么解决这个问题? 请帮忙解决这个问题

【问题讨论】:

  • 你能解释一下你正在苦苦挣扎的部分是什么吗?您是否在某处遇到错误?
  • 程序不工作
  • 找出为什么它不起作用的好方法是停止忽略正在发生的错误。现在,在每个if err != nil 块中,您都拥有return。如果您改为使用log.Fatalln(err),您将获得一些有用的输出,可能会帮助您找出问题所在。

标签: go


【解决方案1】:

我调试了您的代码,发现了 2 个潜在问题:

  1. 仔细检查是否需要使用x509.ParsePKCS1PublicKey()x509.ParsePKIXPublicKey()。这取决于您的公钥的格式。更多信息:https://stackoverflow.com/a/54775627/9698467
  2. 您可能需要在decodepublicKey 函数中键入断言公钥:return publicKey.(*rsa.PublicKey), nil

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 2011-03-01
    • 2019-01-14
    • 2017-11-08
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多