阅读量:1
在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语言实现数据的加密和解密。
以上就是关于“Linux Golang如何实现数据加密与解密”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm