本文摘自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加解密
阅读剩余部分
相关阅读 >>
26 goroutine channel实现并发和并行(三)
golang数组与切片的区别是什么?
golang中“=”与“:=”的区别
golang 产生随机数有多少种方法
golang怎么编写php扩展
golang组件化网络服务器框架halia指南
深度解析golang sync.once源码
go mongodb
rabbitmq 入门 (go) - 1. 简介和安装
手撸golang go与微服务 grpc
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang代码能不能加密