发布时间:2024-12-23 04:22:20
对称加密是一种使用相同的密钥来加密和解密数据的方法。在 Golang 中,常用的对称加密算法有 AES 和 DES。以下是一个使用 AES 加密算法的示例代码:
``` func encryptAES(text string, key string) (string, error) { block, err := aes.NewCipher([]byte(key)) if err != nil { return "", err } ciphertext := make([]byte, aes.BlockSize+len(text)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return "", err } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], []byte(text)) return base64.URLEncoding.EncodeToString(ciphertext), nil } ```上述代码将给定的字符串 `text` 使用 AES 对称加密算法和密钥 `key` 进行加密,并返回加密后的结果。
非对称加密是一种使用不同的密钥进行加密和解密的方法。在 Golang 中,常用的非对称加密算法有 RSA 和 ECDSA。以下是一个使用 RSA 加密算法的示例代码:
``` func encryptRSA(text string, publicKey *rsa.PublicKey) (string, error) { ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, []byte(text)) if err != nil { return "", err } return base64.URLEncoding.EncodeToString(ciphertext), nil } ```上述代码将给定的字符串 `text` 使用 RSA 非对称加密算法和公钥 `publicKey` 进行加密,并返回加密后的结果。
在进行非对称加密时,需要生成一对密钥:公钥和私钥。在 Golang 中,可以使用 `crypto/rand` 和 `crypto/rsa` 包来生成 RSA 密钥对。以下是一个生成 RSA 密钥对的示例代码:
``` func generateRSAKeyPair(bits int) (*rsa.PrivateKey, *rsa.PublicKey, error) { privateKey, err := rsa.GenerateKey(rand.Reader, bits) if err != nil { return nil, nil, err } publicKey := &privateKey.PublicKey return privateKey, publicKey, nil } ```上述代码将生成一个指定长度(单位为位)的 RSA 密钥对,并返回私钥和公钥。
在实际应用中,密钥的安全存储非常重要。在 Golang 中,可以使用 `crypto/rsa` 包的 PEM 编码和解码函数来将密钥存储为文件或字符串。以下是一个将 RSA 密钥存储为文件的示例代码:
``` func saveRSAPrivateKey(privateKey *rsa.PrivateKey, path string) error { privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey) privateKeyPem := &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: privateKeyBytes, } privateKeyFile, err := os.Create(path) if err != nil { return err } defer privateKeyFile.Close() if err := pem.Encode(privateKeyFile, privateKeyPem); err != nil { return err } return nil } ```上述代码将给定的 RSA 私钥 `privateKey` 存储为指定路径的文件。
Golang 提供了丰富的加密库和算法,使得我们能够轻松地实现各种加密和解密功能。通过对称加密算法和非对称加密算法,我们可以保护数据的安全性。此外,生成和存储秘钥对也是整个加密过程中不可或缺的步骤。希望本文对你理解 Golang 秘钥相关的知识有所帮助!