You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用已有RSA公钥加密消息并保存为HEX编码文件的技术求助

解决Go语言RSA加密后转HEX并保存文件的问题

我来帮你完成剩下的步骤!你的代码已经搞定了公钥读取和OAEP加密的核心逻辑,现在只需要补充HEX编码转换和文件写入的部分就行。另外,你代码里的私钥读取和解密模块如果不是当前需求必需的,可以删掉,让代码更聚焦于你的目标。

修改后的完整代码

package main

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

func main() {
    // 1. 读取公钥文件
    publicKeyBytes, err := os.ReadFile("publicik.key")
    if err != nil {
        log.Fatalf("读取公钥文件失败: %v", err)
    }

    // 2. 解析公钥
    publicKey, err := decodePublicKey(publicKeyBytes)
    if err != nil {
        log.Fatalf("解析公钥失败: %v", err)
    }

    // 3. 准备要加密的明文
    plaintext := []byte("Message")

    // 4. 使用RSA-OAEP加密
    ciphertext, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, publicKey, plaintext, nil)
    if err != nil {
        log.Fatalf("加密失败: %v", err)
    }

    // 5. 将加密后的二进制数据转换为HEX编码字符串
    hexCiphertext := hex.EncodeToString(ciphertext)
    log.Printf("加密后的HEX数据: %s", hexCiphertext)

    // 6. 将HEX编码数据写入ciphertext.txt文件
    err = os.WriteFile("ciphertext.txt", []byte(hexCiphertext), 0644)
    if err != nil {
        log.Fatalf("写入文件失败: %v", err)
    }
    log.Println("加密后的HEX数据已成功保存到ciphertext.txt")
}

func decodePublicKey(key []byte) (*rsa.PublicKey, error) {
    block, _ := pem.Decode(key)
    if block == nil {
        return nil, errors.New("无法解析PEM块")
    }

    publicKey, err := x509.ParsePKCS1PublicKey(block.Bytes)
    if err != nil {
        return nil, err
    }
    return publicKey, nil
}

// 如果不需要解密验证,可以删除下面的decodePrivateKey函数
/*
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
}
*/

关键修改点说明

  • 引入encoding/hex包:Go标准库的这个包提供了二进制和HEX字符串互相转换的工具,这里用hex.EncodeToString()把加密后的二进制密文转成可读的HEX字符串。
  • 完善错误处理:把原来的return改成log.Fatalf(),这样程序出错时会输出具体错误信息,方便你排查问题(比如公钥文件不存在、解析失败等)。
  • 添加文件写入逻辑:用os.WriteFile()直接把HEX字符串写入文件,权限设为0644(所有者可读可写,其他用户可读),符合常规文件权限设置。
  • 移除冗余代码:如果你的需求只是加密并保存HEX数据,私钥读取和解密的部分可以注释或删除,让代码更简洁。

注意事项

  1. 确保你的公钥文件publicik.key是PKCS1格式的PEM文件(开头是-----BEGIN RSA PUBLIC KEY-----),如果是PKCS8格式(开头是-----BEGIN PUBLIC KEY-----),需要把x509.ParsePKCS1PublicKey改成x509.ParsePKIXPublicKey,然后类型断言成*rsa.PublicKey。
  2. 运行代码前,确保当前目录有读写权限,否则写入文件会失败。

内容的提问来源于stack exchange,提问作者Universe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:55:21