Linux Golang如何实现数据加密与解密
导读:在Linux环境下使用Go语言(Golang)实现数据的加密与解密,可以利用Go标准库中的crypto包。以下是使用对称加密算法AES(高级加密标准)进行数据加密和解密的示例代码。 AES加密与解密示例 package main impo...
在Linux环境下使用Go语言(Golang)实现数据的加密与解密,可以利用Go标准库中的crypto包。以下是使用对称加密算法AES(高级加密标准)进行数据加密和解密的示例代码。
AES加密与解密示例
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/base64"
"fmt"
"io"
)
// 加密函数
func encrypt(plainText string, key []byte) (cipherText string, err error) {
// 创建一个AES块
block, err := aes.NewCipher(key)
if err != nil {
return "", err
}
// 生成随机IV
iv := make([]byte, aes.BlockSize)
if _, err := io.ReadFull(rand.Reader, iv);
err != nil {
return "", err
}
// 创建一个cipher.BlockMode实例
mode := cipher.NewCBCEncrypter(block, iv)
// 填充明文
plainTextBytes := []byte(plainText)
padding := aes.BlockSize - len(plainTextBytes)%aes.BlockSize
padText := bytes.Repeat([]byte{
byte(padding)}
, padding)
plainTextBytes = append(plainTextBytes, padText...)
// 加密数据
cipherTextBytes := make([]byte, len(plainTextBytes))
mode.CryptBlocks(cipherTextBytes, plainTextBytes)
// 返回Base64编码的密文和IV
cipherText = base64.StdEncoding.EncodeToString(cipherTextBytes)
return cipherText, nil
}
// 解密函数
func decrypt(cipherText string, key []byte) (plainText string, err error) {
// 解码Base64密文
cipherTextBytes, err := base64.StdEncoding.DecodeString(cipherText)
if err != nil {
return "", err
}
// 创建一个AES块
block, err := aes.NewCipher(key)
if err != nil {
return "", err
}
// 创建一个cipher.BlockMode实例
iv := cipherTextBytes[:aes.BlockSize]
mode := cipher.NewCBCDecrypter(block, iv)
// 解密数据
plainTextBytes := make([]byte, len(cipherTextBytes)-aes.BlockSize)
mode.CryptBlocks(plainTextBytes, cipherTextBytes[aes.BlockSize:])
// 去除填充
padding := plainTextBytes[len(plainTextBytes)-1]
plainTextBytes = plainTextBytes[:len(plainTextBytes)-int(padding)]
// 返回明文
plainText = string(plainTextBytes)
return plainText, nil
}
func main() {
key := []byte("1234567890123456") // 16字节密钥
plainText := "Hello, World!"
// 加密
cipherText, err := encrypt(plainText, key)
if err != nil {
fmt.Println("加密失败:", err)
return
}
fmt.Println("加密后的密文:", cipherText)
// 解密
decryptedText, err := decrypt(cipherText, key)
if err != nil {
fmt.Println("解密失败:", err)
return
}
fmt.Println("解密后的明文:", decryptedText)
}
代码说明
-
加密函数
encrypt:- 创建一个AES块。
- 生成随机的初始化向量(IV)。
- 使用CBC模式进行加密。
- 填充明文以满足AES块大小要求。
- 加密数据并返回Base64编码的密文和IV。
-
解密函数
decrypt:- 解码Base64密文。
- 创建一个AES块。
- 提取IV并使用CBC模式进行解密。
- 去除填充并返回明文。
注意事项
- 密钥长度: AES支持128位(16字节)、192位(24字节)和256位(32字节)的密钥长度。确保密钥长度符合要求。
- IV: IV应该是随机生成的,并且在每次加密时都不同。IV不需要保密,但必须唯一。
- 填充: 为了满足AES块大小要求,明文需要进行填充。常用的填充方式是PKCS#7填充。
通过这种方式,你可以在Linux环境下使用Go语言实现数据的加密和解密。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Golang如何实现数据加密与解密
本文地址: https://pptw.com/jishu/773131.html
