用goland写一个rsa加密的代码
时间: 2023-05-31 18:07:39 浏览: 147
golang Rsa解密、加密
好的,这是一个关于Go语言中RSA加密的示例代码:
```go
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha256"
"crypto/x509"
"encoding/pem"
"fmt"
)
func main() {
// 生成RSA密钥对
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(err)
}
// 将私钥序列化为PEM格式
privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey)
privateKeyPEM := pem.EncodeToMemory(&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: privateKeyBytes,
})
// 打印私钥
fmt.Println(string(privateKeyPEM))
// 将公钥序列化为PEM格式
publicKeyBytes, err := x509.MarshalPKIXPublicKey(&privateKey.PublicKey)
if err != nil {
panic(err)
}
publicKeyPEM := pem.EncodeToMemory(&pem.Block{
Type: "RSA PUBLIC KEY",
Bytes: publicKeyBytes,
})
// 打印公钥
fmt.Println(string(publicKeyPEM))
// 要加密的明文
plaintext := []byte("Hello, world!")
// 使用公钥加密明文
ciphertext, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, &privateKey.PublicKey, plaintext, nil)
if err != nil {
panic(err)
}
// 打印密文
fmt.Printf("加密后的密文:%x\n", ciphertext)
// 使用私钥解密密文
decrypted, err := privateKey.Decrypt(nil, ciphertext, &rsa.OAEPOptions{Hash: sha256.New()})
if err != nil {
panic(err)
}
// 打印解密后的明文
fmt.Printf("解密后的明文:%s\n", decrypted)
}
```
这段代码首先生成一个2048位的RSA密钥对,然后将私钥和公钥序列化为PEM格式并打印出来。接着,使用公钥加密一个明文,并打印出密文。最后使用私钥解密密文,并打印出明文。
阅读全文