Linux下Golang如何完成数据加密

作者:袖梨 2026-07-05

在Linux下使用Golang进行数据加密,你可以使用Go标准库中的"crypto"包。这个包提供了许多加密算法,如AES、DES、RSA等。下面是一个使用AES加密和解密的简单示例:

Linux下Golang如何实现数据加密

package mainimport ("crypto/aes""crypto/cipher""crypto/rand""encoding/hex""fmt""io")func main() {key := []byte("this is a 16 byte key") // AES-128需要16字节的密钥plaintext := []byte("Hello, World!")// 加密ciphertext, err := encrypt(key, plaintext)if err != nil {panic(err)}fmt.Printf("Ciphertext: %sn", hex.EncodeToString(ciphertext))// 解密decrypted, err := decrypt(key, ciphertext)if err != nil {panic(err)}fmt.Printf("Decrypted: %sn", decrypted)}func encrypt(key, plaintext []byte) ([]byte, error) {block, err := aes.NewCipher(key)if err != nil {return nil, err}plaintext = pkcs5Padding(plaintext, aes.BlockSize)ciphertext := make([]byte, len(plaintext))iv := make([]byte, aes.BlockSize)if _, err := io.ReadFull(rand.Reader, iv); err != nil {return nil, err}mode := cipher.NewCBCEncrypter(block, iv)mode.CryptBlocks(ciphertext, plaintext)return append(iv, ciphertext...), nil}func decrypt(key, ciphertext []byte) ([]byte, error) {block, err := aes.NewCipher(key)if err != nil {return nil, err}if len(ciphertext) < aes.BlockSize {return nil, fmt.Errorf("ciphertext too short")}iv := ciphertext[:aes.BlockSize]ciphertext = ciphertext[aes.BlockSize:]mode := cipher.NewCBCDecrypter(block, iv)plaintext := make([]byte, len(ciphertext))mode.CryptBlocks(plaintext, ciphertext)plaintext = pkcs5UnPadding(plaintext)return plaintext, nil}func pkcs5Padding(src []byte, blockSize int) []byte {padding := blockSize - len(src)%blockSizepadtext := bytes.Repeat([]byte{byte(padding)}, padding)return append(src, padtext...)}func pkcs5UnPadding(src []byte) []byte {length := len(src)unpadding := int(src[length-1])return src[:(length - unpadding)]}

在这个示例中,我们使用了AES加密算法和CBC模式。首先,我们创建了一个AES密码块,然后对明文进行PKCS5填充以满足块大小要求。接下来,我们生成一个随机的初始化向量(IV),并使用CBC模式进行加密。最后,我们将IV附加到密文的前面,以便在解密时使用。

解密过程与加密过程相反。我们从密文中提取IV,然后使用CBC模式进行解密。最后,我们对解密后的数据进行PKCS5去除填充。

注意:在实际应用中,密钥管理和错误处理非常重要。这个示例仅用于演示目的,不建议在生产环境中使用。

相关文章

精彩推荐