首页主机资讯Linux Golang如何实现数据加密与解密

Linux Golang如何实现数据加密与解密

时间2025-12-16 19:46:04发布访客分类主机资讯浏览1126
导读:在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)
}
    

代码说明

  1. 加密函数 encrypt:

    • 创建一个AES块。
    • 生成随机的初始化向量(IV)。
    • 使用CBC模式进行加密。
    • 填充明文以满足AES块大小要求。
    • 加密数据并返回Base64编码的密文和IV。
  2. 解密函数 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
Linux Dopra:如何管理用户权限 如何在Linux上配置Golang的测试环境

游客 回复需填写必要信息