本文摘自php中文网,作者尚,侵删。

golang代码加密方法:
DES加解密
golang中的标准库crypto/des中有DES的实现,但是golang库的描述比较简单,如果不熟悉DES的加密规则,是不容易
进行相应代码编写的,与第三方进行不同语言之间的加密与解密时,也容易混淆,出现错误。
不同的平台与语言进行DES加解密对接时,需要知道对方的是采用何种加密模式以及何种填充方式:
Windows 默认是CBC模式,CryptSetKeyParam函数,openssl 函数名中直接表明
Java 中如果Cipher.getInstance()中不填写,默认是DES/ECB/PKCS5Padding
C# 中默认是CBC模式,PKCS7Padding(PKCS5Padding)
golang默认提供的是CBC模式,所以对于ECB模式,需要自己编写代码
PKCS5Padding与PKCS5Unpadding
1 2 3 4 5 6 7 8 9 10 11 | func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
func PKCS5Unpadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
|
ECB加密模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | block, err := des.NewCipher(key)
if err != nil {
...
}
bs := block.BlockSize()
src = PKCS5Padding(src, bs)
if len(src)%bs != 0 {
....
}
out := make([]byte, len(src))
dst := out
for len(src) > 0 {
block.Encrypt(dst, src[:bs])
src = src[bs:]
dst = dst[bs:]
}
...
}
|
RSA加解密
阅读剩余部分
相关阅读 >>
分享一个go json 踩坑记录
golang调试工具有哪些?
golang cond基本用法
聊聊dubbo-go-proxy的loggerfilter
如何基于go搭建一个大数据平台
型模式
erlang和golang的区别
golang怎么编写一个window定时关机
golang中的空接口使用
手撸golang 架构设计原则 接口隔离原则
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang代码能不能加密