使用已有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数据,私钥读取和解密的部分可以注释或删除,让代码更简洁。
注意事项
- 确保你的公钥文件
publicik.key是PKCS1格式的PEM文件(开头是-----BEGIN RSA PUBLIC KEY-----),如果是PKCS8格式(开头是-----BEGIN PUBLIC KEY-----),需要把x509.ParsePKCS1PublicKey改成x509.ParsePKIXPublicKey,然后类型断言成*rsa.PublicKey。 - 运行代码前,确保当前目录有读写权限,否则写入文件会失败。
内容的提问来源于stack exchange,提问作者Universe
相关产品推荐
相关产品推荐

