golang非对称加密

发布时间:2024-11-21 17:37:09

Go语言实现非对称加密

在信息安全领域,加密是一种重要的保护机制。非对称加密算法是其中一种常用的加密方式,通常使用公钥加密、私钥解密的方式进行数据传输和存储,以确保只有授权的人能够访问敏感信息。

Go语言作为一门现代化的编程语言,提供了强大的密码学库和函数,可以方便地实现非对称加密。下面我们将介绍如何使用Go语言进行非对称加密。

生成密钥对

首先,我们需要生成密钥对,其中包括公钥和私钥。公钥用于加密数据,私钥用于解密数据。

```go package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "os" ) func generateKeyPair() error { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { return err } privateKeyFile, err := os.Create("private.pem") if err != nil { return err } defer privateKeyFile.Close() pem.Encode(privateKeyFile, &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey), }) publicKey := privateKey.PublicKey publicKeyFile, err := os.Create("public.pem") if err != nil { return err } defer publicKeyFile.Close() pem.Encode(publicKeyFile, &pem.Block{ Type: "RSA PUBLIC KEY", Bytes: x509.MarshalPKCS1PublicKey(&publicKey), }) return nil } func main() { err := generateKeyPair() if err != nil { panic(err) } } ```

运行以上代码,将生成`private.pem`和`public.pem`两个密钥文件。

加密与解密

一旦生成了密钥对,我们就可以使用公钥加密数据,并使用私钥解密。

```go package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "fmt" "io/ioutil" ) func encryptData(data []byte) ([]byte, error) { publicKeyFile, err := ioutil.ReadFile("public.pem") if err != nil { return nil, err } block, _ := pem.Decode(publicKeyFile) publicKey, err := x509.ParsePKCS1PublicKey(block.Bytes) if err != nil { return nil, err } encryptedData, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, data) if err != nil { return nil, err } return encryptedData, nil } func decryptData(encryptedData []byte) ([]byte, error) { privateKeyFile, err := ioutil.ReadFile("private.pem") if err != nil { return nil, err } block, _ := pem.Decode(privateKeyFile) privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { return nil, err } decryptedData, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, encryptedData) if err != nil { return nil, err } return decryptedData, nil } func main() { data := []byte("Hello, World!") encryptedData, err := encryptData(data) if err != nil { panic(err) } decryptedData, err := decryptData(encryptedData) if err != nil { panic(err) } fmt.Println(string(decryptedData)) } ```

运行以上代码,将输出`Hello, World!`。

使用非对称加密的优势

非对称加密算法相比对称加密算法有一些明显的优势:

综上所述,Go语言提供了强大的密码学库和函数,使得非对称加密变得非常简便。通过生成密钥对、加密和解密数据,我们可以应用非对称加密来保护敏感数据的存储和传输,确保信息安全。

相关推荐