
场景:Google认为DES/ECB/PKCS5padding ECB加密安全性低,故没有对方开放.但是我们以前的工程使用的DES/ECB/PKCS5padding算法,并且已经入库了,所以只能自己实现该算法
import ( "enCoding/base64" "bytes" "enCoding/binary" "crypto/des" "errors" "log")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)]}func DesEncrypt(src,key []byte) ([]byte,error) { block,err := des.NewCipher(key) if err != nil { return nil,err } bs := block.BlockSize() src = PKCS5padding(src,bs) if len(src) % bs != 0 { return nil,errors.New("Need a multiple of the blocksize") } out := make([]byte,len(src)) dst := out for len(src) > 0 { block.Encrypt(dst,src[:bs]) src = src[bs:] dst = dst[bs:] } return out,nil}func DesDecrypt(src,err } out := make([]byte,len(src)) dst := out bs := block.BlockSize() if len(src) % bs != 0 { return nil,errors.New("crypto/cipher: input not full blocks") } for len(src) > 0 { block.Decrypt(dst,src[:bs]) src = src[bs:] dst = dst[bs:] } out = PKCS5Unpadding(out) return out,nil}
参考 https://gist.github.com/cuixin/10612934 通过他修改而来
另外java和golang byte数组转化也是一个坑 @see http://www.jb51.cc/article/p-gefnvkxj-bpk.html
总结以上是内存溢出为你收集整理的golang中DES/ECB/PKCS5Padding的实现全部内容,希望文章能够帮你解决golang中DES/ECB/PKCS5Padding的实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)