Golang 里的 AES、DES、3DES 加解密,支持 ECB、CBC 等多种模式组合

摘要:
Opensslencryption:OpenSSL库的功能包,用于对称和非对称加密和解密。AES-ECB:src:=[]字节密钥:=[]字节数据,_:=openssl.AseECBEncryptfmt。打印f//yXVUkR45PFz0UfpbDB8/ew==dst,_=openssl.AseECBDcryptfmt。Println//123456AES-CBC:src:=[]字节密钥:=[]字节:=[]字节dst,_:=openssl.AescCBEncryptfmt。Println//1jdzWuniG6UMtoa3T6uNLA==dst,_=openssl。AesCBC解密。Println//123456DES键的长度必须为8个字符(64位)。

Openssl encryption:OpenSSL库的功能包装,用于对称和非对称加密和解密。

  • AES-ECB
  • AES-CBC
  • DES-ECB
  • DES-CBC
  • 3DES-ECB
  • 3DES-CBC

安装

go get -u github.com/thinkoner/openssl

用法

AES

密钥的长度可以是16/24/32个字符(128/192/256位)。

AES-ECB:

src := []byte("123456")
key := []byte("1234567890123456")
dst , _ := openssl.AesECBEncrypt(src, key, openssl.PKCS7_PADDING)
fmt.Printf(base64.StdEncoding.EncodeToString(dst))  // yXVUkR45PFz0UfpbDB8/ew==

dst , _ = openssl.AesECBDecrypt(dst, key, openssl.PKCS7_PADDING)
fmt.Println(string(dst)) // 123456

AES-CBC:

src := []byte("123456")
key := []byte("1234567890123456")
iv := []byte("1234567890123456")
dst , _ := openssl.AesCBCEncrypt(src, key, iv, openssl.PKCS7_PADDING)
fmt.Println(base64.StdEncoding.EncodeToString(dst)) // 1jdzWuniG6UMtoa3T6uNLA==

dst , _ = openssl.AesCBCDecrypt(dst, key, iv, openssl.PKCS7_PADDING)
fmt.Println(string(dst)) // 123456

DES

密钥的长度必须为8个字符(64位)。

DES-ECB:

openssl.DesECBEncrypt(src, key, openssl.PKCS7_PADDING)
openssl.DesECBDecrypt(src, key, openssl.PKCS7_PADDING)

DES-CBC:

openssl.DesCBCEncrypt(src, key, iv, openssl.PKCS7_PADDING)
openssl.DesCBCDecrypt(src, key, iv, openssl.PKCS7_PADDING)

3DES

密钥的长度必须为24个字符(192位)。

3DES-ECB:

openssl.Des3ECBEncrypt(src, key, openssl.PKCS7_PADDING)
openssl.Des3ECBDecrypt(src, key, openssl.PKCS7_PADDING)

3DES-CBC:

openssl.Des3CBCEncrypt(src, key, iv, openssl.PKCS7_PADDING)
openssl.Des3CBCDecrypt(src, key, iv, openssl.PKCS7_PADDING)

免责声明:文章转载自《Golang 里的 AES、DES、3DES 加解密,支持 ECB、CBC 等多种模式组合》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇操作系统复习知识使用replaceAll实现字符串替换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

error: ‘for’ loop initial declarations are only allowed in C99 mode

比如写出下面这段程序: for (int i = 0; i < n; ++i) do_something(); 然后用gcc编译,会报‘for’ loop initial declarations are only allowed in C99 mode的错误。 原因是在循环条件中声明变量,只在C99标准中支持,C90标准不支持。 所以改成: int...

Golang反射上篇

目录 1、反射的定义 2、反射的基础数据类型 3、Type 4、Value 5、反射三大定律 5.1 反射第一定律 5.2 反射第二定律 5.3 反射第三定律 6、反射常用的API 6.1 获取type类型 6.2 获取Field信息 6.3 获取method信息 6.4 获取函数信息 6.5 赋值和转换关系 6.6 是否实现接口 6.7 v...

Adobe SVG View 动态修改src的问题

今天想对项目中的svg view进行动态修改src,这样可以避免框架的使用(之前的解决方案是刷新View所存在的框架页面),解决方法如下: varembedTag =document.getElementById("embed1");varoParent =embedTag.parentNode;oParent.removeChild(embedTag)...

C/C++调用Golang 一

C/C++调用Golang 一 (开发环境: 操作系统: windows 7 32位操作系统 C++: visual studio 2010 Golang:go version go1.9 windows/386 TDM-GCC-32) 用一个简单的例子演示如何在C++中调用golang程序。用golang编写一个简单的函数,编译成动态链接...

.NET 通用多条件动态参数查询方法 SqlSugar ORM

通用查询用途 一般我们Grid控件,会有很多条件传给后台,如果每个条件都写一个逻辑的话,那么工作量将非常大,所以通用查询功能是每个软件必备的, SqlSugar将通用查询封装到支持了树型条件,并且支持所有常用的操作,用SqlSugar或者不用SqlSugar的都可参参考一下 1、简单多条件多动参数 创建数据库对象 //创建数据库对象 SqlSugarCl...

CSS样式大全

字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、PD 样式 {font-style: oblique;}(偏斜体) italic;(斜体) normal;(正常) 行高 {line-height: normal;}(正常) 单位:PX、PD、EM 粗细...