Go语言使用AES加密解密

news/2024/12/2 15:01:28/

Go语言提供了标准库中的crypto/aes包来支持AES加密和解密。下面是使用AES-128-CBC模式加密和解密的示例代码:

package mainimport ("crypto/aes""crypto/cipher""encoding/base64""fmt"
)func main() {key := []byte("this is a 16 byte key")iv := []byte("this is a 16 byte iv")plaintext := []byte("hello world")// 加密ciphertext, err := encrypt(plaintext, key, iv)if err != nil {panic(err)}fmt.Printf("加密结果:%s\n", base64.StdEncoding.EncodeToString(ciphertext))// 解密decrypted, err := decrypt(ciphertext, key, iv)if err != nil {panic(err)}fmt.Printf("解密结果:%s\n", decrypted)
}func encrypt(plaintext []byte, key []byte, iv []byte) ([]byte, error) {block, err := aes.NewCipher(key)if err != nil {return nil, err}ciphertext := make([]byte, len(plaintext))mode := cipher.NewCBCEncrypter(block, iv)mode.CryptBlocks(ciphertext, plaintext)return ciphertext, nil
}func decrypt(ciphertext []byte, key []byte, iv []byte) ([]byte, error) {block, err := aes.NewCipher(key)if err != nil {return nil, err}plaintext := make([]byte, len(ciphertext))mode := cipher.NewCBCDecrypter(block, iv)mode.CryptBlocks(plaintext, ciphertext)return plaintext, nil
}

以上代码使用AES-128-CBC模式进行加密和解密,可以更换成其他AES模式,如AES-192-CBC或AES-256-CBC等,只需要更改密钥长度即可。注意,本示例代码中使用了base64编码对密文进行了格式化,如果您需要直接使用二进制密文,请忽略base64编码部分。

在AES加密和解密的过程中,需要使用到一些参数,以下是这些参数的作用解释:
1.Plaintext(明文):需要加密的原始数据。

2.Ciphertext(密文):加密后的数据。

3.Key(密钥):用于加密和解密的密钥,长度可以为16、24或32字节(即128位、192位或256位)。

4.IV(初始化向量):一段固定长度的随机数,用于增强AES加密的强度。IV的长度通常为16字节(即128位),它必须与密钥一起使用。

5.Block(块):AES加密和解密的基本单元,它的大小与密钥长度相关,例如使用128位密钥时,块的大小为128位(即16字节)。

6.Mode(模式):AES加密可以使用多种模式,如ECB、CBC、CFB、OFB等,每种模式都有其特定的加密规则和优缺点。

7.Padding(填充):由于AES加密的块大小通常为128位,而明文的长度可能不是块大小的整数倍,因此需要进行填充。常见的填充方式有PKCS#5和PKCS#7,它们可以保证明文长度为块大小的整数倍。

以上是AES加密和解密中一些重要的参数和概念,了解这些参数和概念可以帮助您更好地理解AES加密和解密的过程和实现。


http://www.ppmy.cn/news/1091775.html

相关文章

【网络安全带你练爬虫-100练】第23练:文件内容的删除+写入

目录 0x00 前言: 0x02 解决: 0x00 前言: 本篇博文可能会有一点点的超级呆 0x02 解决: 你是不是也会想: 使用pyrhon将指定文件夹位置里面的1.txt中数据全部删除以后---->然后再将参数req_text的值写入到1.txt …

【考研数学】高等数学第五模块 —— 级数(2,幂级数)

文章目录 引言二、幂级数2.1 基本概念2.2 幂级数的收敛半径与收敛域2.3 幂级数的性质2.4 将函数展开为幂级数2.4.1 直接法2.4.2 间接法 2.5 求幂级数的和函数 写在最后 引言 承接前文的常数项级数,我们来继续看看关于幂级数的内容。 二、幂级数 2.1 基本概念 函数…

java 实现建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,用于创建一个复杂对象,将对象的构建过程与其表示分离,以便可以使用相同的构建过程来创建不同的表示。在Java中,可以使用建造者模式来构建具有多个属性的对…

【CAD二次开发】重新加载acad.pgp快捷菜单文件

为了加快绘图速度,好多人会进行CAD快捷命令的修改,那怎么在不需要重启CAD的情况下自动更新? CAD修改acad.pgp,快捷命令后,自动更新。 方法一 命令行输入reinit,命令。 在弹出的窗口中,选择‘PGP文件’&…

R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列...

全文链接:http://tecdat.cn/?p31162 最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出(点击文末“阅读原文”获取完整代码数据)。 相关视频 本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广…

Android逆向学习(四)app修改smali函数跳过弹窗广告,等待广告,更新提醒

Android逆向学习(四)app修改smali函数跳过弹窗广告,等待广告,更新提醒 一、写在前面 这是吾爱破解课程的第三个练习,我在写这篇博客时遇到了vscode插件bug,已经想办法联系原作者了,希望能够尽…

OPENCV+QT环境配置

【qtopencv开发入门:4步搞定opencv环境配置2】https://www.bilibili.com/video/BV1f34y1v7t8?vd_source0aeb782d0b9c2e6b0e0cdea3e2121eba 第一步: 安装QT Qt 5.15 第二步: 安装OPENCV VS2022 Opencv4.5.5 C 配置_愿飞翔的鱼儿的博客…

16字节协议的串口通信

1.协议要求 协议为帧传输,一共16字节。主要是2字节的固定帧头 EB 90,2字节的帧计数(用来计数发出的帧),10字节的数据和2字节的校验位 帧头:2字节,固定值 8’HEB、8’H90 帧计数:2字节,用来说明发出去帧是…