Go语言里AES加密与解密数据的使用方法

2025-01-09 02:08:13   小编

Go语言里AES加密与解密数据的使用方法

在当今数字化时代,数据安全至关重要。AES(高级加密标准)作为一种广泛应用的对称加密算法,在Go语言中也有成熟的实现。下面我们就来深入了解一下Go语言里AES加密与解密数据的使用方法。

要使用AES加密,需要导入Go语言标准库中的“crypto/aes”包。在进行加密操作前,要确保密钥的长度是合法的。AES支持128位、192位和256位的密钥长度。

以下是一个简单的AES加密示例代码:

package main

import (
    "crypto/aes"
    "fmt"
)

func encrypt(plaintext, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err!= nil {
        return nil, err
    }
    blockSize := block.BlockSize()
    plaintext = pkcs7Padding(plaintext, blockSize)
    ciphertext := make([]byte, len(plaintext))
    mode := NewCBCEncrypter(block, key[:blockSize])
    mode.CryptBlocks(ciphertext, plaintext)
    return ciphertext, nil
}

func pkcs7Padding(data []byte, blockSize int) []byte {
    padding := blockSize - len(data)%blockSize
    padtext := make([]byte, len(data)+padding)
    copy(padtext[:len(data)], data)
    for i := len(data); i < len(padtext); i++ {
        padtext[i] = byte(padding)
    }
    return padtext
}

在这段代码中,encrypt函数接受明文和密钥作为参数。首先通过aes.NewCipher创建一个AES加密块,然后对明文进行填充,最后使用CBC(Cipher Block Chaining)模式进行加密。

接下来是解密部分的代码:

func decrypt(ciphertext, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err!= nil {
        return nil, err
    }
    blockSize := block.BlockSize()
    if len(ciphertext)%blockSize!= 0 {
        return nil, fmt.Errorf("ciphertext length is not a multiple of block size")
    }
    plaintext := make([]byte, len(ciphertext))
    mode := NewCBCDecrypter(block, key[:blockSize])
    mode.CryptBlocks(plaintext, ciphertext)
    plaintext = pkcs7Unpadding(plaintext)
    return plaintext, nil
}

func pkcs7Unpadding(data []byte) []byte {
    length := len(data)
    unpadding := int(data[length - 1])
    return data[:(length - unpadding)]
}

decrypt函数与加密函数类似,先创建加密块,然后使用CBC模式进行解密,最后去除填充。

通过以上代码示例,我们可以看到在Go语言中实现AES加密与解密并不复杂。无论是保护用户敏感信息,还是在网络通信中确保数据安全,AES加密都能发挥重要作用。掌握这些方法,能为我们的程序提供更可靠的数据安全保障,在开发中更好地应对各种安全需求。

TAGS: GO语言 数据加解密 AES加密 AES解密

欢迎使用万千站长工具!

Welcome to www.zzTool.com