当前位置: 代码网 > it编程>前端脚本>Golang > GO语言实现AES-CFB加密的操作方法

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

2024年11月26日 Golang 我要评论
这里为了使用方便,实现代码不作为一个函数而是作为一个包,这样在后面的代码中也可以进行复用。包和导入package encryptimport ("crypto/aes" // 提供 ae

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

包和导入

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
}
  • encrypt 函数接收明文和用于 aes 加密的密钥。
  • aes.newcipher([]byte(key)): 利用提供的密钥生成一个 aes 块密码。
  • iv(初始化向量)是 aes 块大小(16 字节)的随机数,确保同样的明文每次加密结果不同。
  • 使用 cipher.newcfbencrypter 创建 cfb 加密
  • stream.xorkeystream(ciphertext, plaintext): 用流加密对明文进行加密,结果保存在 ciphertext 中。
  • 将 iv 和 ciphertext 合并为一个切片,然后使用 base64 编码生成字符串

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
}
  • decrypt 函数接收 base64 编码的密文和密钥。 将 base64 密文解码成字节切片。 类似加密过程,生成 aes 块密码。
  • 验证密文长度,确保其大于 aes 块大小。 从解码后的密文中提取 iv,其余部分为实际密文。 使用cipher.newcfbdecrypter 函数创建 cfb 解密流。 解密密文,得出明文。

注意事项

  • 使用 cfb 模式不需要明文填充。 密钥长度应为 16, 24 或 32 字节,以匹配 aes-128, aes-192 或aes-256。 随机 iv 很重要,每次加密都使用新的 iv 增强安全性。

到此这篇关于go语言实现aes-cfb加密的文章就介绍到这了,更多相关go语言 aes-cfb加密内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com