Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > GO语言 AES-CFB加密

GO语言实现AES-CFB加密的操作方法

作者:且去填词

本文介绍了如何用Go语言实现AES-CFB加密和解密,首先,定义一个属于encrypt包的文件,使用AES算法、CFB模式和Base64编码等功能,在加密函数中,接收明文和密钥,生成一个AES块密码和一个随机的初始化向量,实现明文的加密

这里为了使用方便,实现代码不作为一个函数而是作为一个包,这样在后面的代码中也可以进行复用。

包和导入

package encrypt
import (
	"crypto/aes"        // 提供 AES 加密算法实现
	"crypto/cipher"     // 提供加密算法接口和模式(如 CFB)
	"crypto/rand"       // 提供生成随机数功能
	"encoding/base64"   // 提供 Base64 编码和解码
	"fmt"               // 格式化 I/O
	"io"                // 基本 I/O 接口
)

package encrypt: 定义该文件属于 encrypt 包。
各种导入用于提供不同功能,如 AES 算法、CFB 模式、Base64 编码等。

Encrypt 函数

// Encrypt 对明文进行AES-CFB加密
func Encrypt(plaintext []byte, key string) (string, error) {
	block, err := aes.NewCipher([]byte(key))
	if err != nil {
		return "", err
	}
	iv := make([]byte, aes.BlockSize)
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		return "", err
	}
	stream := cipher.NewCFBEncrypter(block, iv)
	ciphertext := make([]byte, len(plaintext))
	stream.XORKeyStream(ciphertext, plaintext)
	// 合并 IV 和密文
	result := append(iv, ciphertext...)
	// 使用 Base64 编码返回
	return base64.StdEncoding.EncodeToString(result), nil
}

Decrypt 函数

// Decrypt 对密文进行AES-CFB解密
func Decrypt(ciphertextBase64 string, key string) ([]byte, error) {
	ciphertext, err := base64.StdEncoding.DecodeString(ciphertextBase64)
	if err != nil {
		return nil, err
	}
	block, err := aes.NewCipher([]byte(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:]
	stream := cipher.NewCFBDecrypter(block, iv)
	plaintext := make([]byte, len(ciphertext))
	stream.XORKeyStream(plaintext, ciphertext)
	return plaintext, nil
}

注意事项

到此这篇关于GO语言实现AES-CFB加密的文章就介绍到这了,更多相关GO语言 AES-CFB加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文