Go语言使用AES加密解密

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.mzph.cn/news/180372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Mybatis 的 TypeHandler 存取 Postgresql jsonb 类型

文章目录 使用 TypeHandler 存取 Postgresql jsonb 类型常见错误column "" is of type jsonb but expression is of type character varying 使用 TypeHandler 存取 Postgresql jsonb 类型 首先在数据库表中定义 jsonb 类型: create table tb_user_info…

Android Studio导入项目一直显示正在下载Gradle项目

如题,问题图类似如下: (此图是解决以后截的,之前遇到问题没截图) 解决方法 先找到你正在下载的gradle的版本是哪个 然后在链接中 ​​​​​​Gradle Distributions 找到你所对于gradle的版本,下载对应…

React 和 Vue 在技术层面有哪些区别?

React 和 Vue 是两个非常流行的前端框架,它们在技术层面有以下几点区别: 数据驱动方式不同:React 的数据驱动是单向的,即从父组件向子组件传递数据,子组件不能直接修改父组件的数据。Vue 的数据驱动则是双向的&#xf…

【攻防世界-misc】János-the-Ripper

1.下载并解压桌面 2.用记事本打开misc100,可以看见文件里面是有flag.txt文件的, 3.将文件复制到虚拟机kali中,使用命令:binwalk -e 桌面/misc100 4.解压完以后打开桌面,会出现一个分离后的文件夹,打开文件…

windows10 Arcgis pro3.0-3.1

我先安装的arcgis pro3.0,然后下载的3.1。 3.0里面有pro、help、sdk、还有一些补丁包根据个人情况安装。 3.1里面也是这些。 下载 正版试用最新的 ArcGIS Pro 21 天教程,仅需五步!-地理信息云 (giscloud.com.cn) 1、安装windowsdesktop-…

Git删除临时分支

愿所有美好如期而遇 软件开发过程中,总有功能要添加进来,当我们有一个功能开发了一半的时候,产品经理说这个功能不需要了,尽管很无奈,但还是要删除,我开发到一半的分支如何删除呢? 所以需要使用…

第14关 快速定位业务服务慢的问题:利用 Ingress-Nginx 和日志查询实现高效故障排查

大家好,我是博哥爱运维。 有这样的一个生产场景,客户访问我们的服务请求超时或感觉很慢的时候,会向我们的客服反馈问题,这个时候,客服就会来找到我们运维让帮助排查下原因。 这里我们运维人员首先要对自己业务的整个…

记录Windows下安装redis的过程

开源博客项目Blog支持使用EasyCaching组件操作redis等缓存数据库,在继续学习开源博客项目Blog之前,准备先学习redis和EasyCaching组件的基本用法,本文记录在Windows下安装redis的过程。   虽然redis官网文档写着支持Linux、macOS、Windows等…

冒泡排序以及改进方案

冒泡排序以及改进方案 介绍: 冒泡排序属于一种典型的交换排序(两两比较)。冒泡排序就像是把一杯子里的气泡一个个往上冒一样。它不断比较相邻的元素,如果顺序不对就像水泡一样交换它们的位置,直到整个序列像水泡一样…

使用opencv实现更换证件照背景颜色

1 概述 生活中经常要用到各种要求的证件照电子版,红底,蓝底,白底等,大部分情况我们只有其中一种,本文通过opencv实现证件照背景的颜色替换。 1.1 opencv介绍 OpenCV(Open Source Computer Vision Librar…

UI上传组件异步上传更改为同步

实现异步方法 JavaScript 异步 实现异步的五种实现方法_js异步-CSDN博客 这两种比较经常用。 因为上传组件是异步上传的通过Async和await配合使用可以上传完照片视频后返回的地址在继续走下去,而不是图片视频地址还未获取时就上传后端了。

java文件上传以及使用阿里云OSS

JavaWeb 文件上传本地存储阿里云OSS配置文件 yml配置文件 文件上传 前端页面三要素: 表单项type“file” 表单提交方式post 表单的enctype属性multipart/form-data 本地存储 保证上传的文件不重复 //获取原始文件名String originalFilename image.getOriginalFi…

计算机毕业设计 基于PHP的考研互助交流系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

机器学习笔记 - 基于百度飞桨PaddleSeg的人体分割

一、简述 虽然Segment Anything用于图像分割的通用大模型看起来很酷(飞桨也提供分割一切的模型),但是个人感觉落地应用的时候心里还是更倾向于飞桨这种场景式的,因为需要用到一些人体分割的需求,所以这里主要是对飞桨高性能图像分割开发套件进行了解和使用,但是暂时不训练…

day64 django中间件的复习使用

django中间件 django中间件是django的门户 1.请求来的时候需要先经过中间件才能达到真正的django后端 2.响应走的时候也需要经过中间件 ​ djangp自带七个中间件MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddle…

解决Maven项目jar包下载失败的问题

文章目录 配置国内的Maven源引入正确的settings.xml文件重新下载jar包对后面要创建的新项目也统一配置仍然失败的解决办法 配置国内的Maven源 引入正确的settings.xml文件 如果该目录下的 settings.xml文件不存在或者错误,要创建一个 settings.xml文件并写入正确的…

Java 常用容器

目录 列表栈&#xff08;类&#xff09;队列(接口)setMap 列表 package com.czl;import java.util.ArrayList; import java.util.List; //AltEnter导入包 public class Main {public static void main(String[] args) throws Exception{List<Integer> list new ArrayLis…

35 - 什么时候需要分表分库?

在当今互联网时代&#xff0c;海量数据基本上是每一个成熟产品的共性&#xff0c;特别是在移动互联网产品中&#xff0c;几乎每天都在产生数据&#xff0c;例如&#xff0c;商城的订单表、支付系统的交易明细以及游戏中的战报等等。 对于一个日活用户在百万数量级的商城来说&a…

LeetCode 5 最长回文子串

题目描述 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;…

这个变量要不要用volatile修饰呢?

正文 大家好&#xff0c;又见面了&#xff0c;我是bug菌~ 在嵌入式软件开发过程中&#xff0c;如果对volatile不熟&#xff0c;那可以你应该是个"假嵌入式程序员"&#xff0c;因为一个变量需不需要使用volatile考虑的场景挺多的&#xff0c;如果在某些场景下乱用&…