golang中DES/ECB/PKCS5Padding的实现
来源:互联网 发布:博士德汽修软件 编辑:程序博客网 时间:2024/06/05 22:39
场景: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, key []byte) ([]byte, error) { block, err := des.NewCipher(key) if err != nil { return nil, 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://blog.csdn.net/hai046/article/details/52353963
0 0
- golang中DES/ECB/PKCS5Padding的实现
- DES/ECB/CBC/PKCS5Padding
- php中实现3DES算法(ECB加密模式PKCS5Padding填充)
- 和java的DES/ECB/PKCS5Padding相同的objc实现方式
- Java与C/C++通用的“AES/ECB/PKCS5Padding”实现
- JAVA DES加密(DES/ECB/PKCS5Padding)和C#加密对应设置
- JAVA实现DES的ECB/CBC的加密算法
- AES/ECB/PKCS5Padding
- java和iOS的DES/EBC/PKCS5Padding
- golang实现AES ECB模式的加密和解密
- 利用CryptoJS进行aes的AES/ECB/PKCS5Padding加密
- 3DES、DES的CBC、ECB
- AES128 ECB加密pkcs5padding补码
- AES/ECB/PKCS5Padding 加密类
- python 实现DES加密 ECB模式
- 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- AES - 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- group by 多个条件
- 怎么查看APK的方法数
- IT--linux--centos使用shadowsocks
- Qt 中使用C++11标准
- 1019. General Palindromic Number (20)
- golang中DES/ECB/PKCS5Padding的实现
- 同步与异步write的效率比较
- Qt之QLocalServer
- golang 模板(template)的常用基本语法
- beamer模板 (tex制作slides)
- NOI.OPENJUDGE 1.13.20感想
- strcpy与memcpy的区别
- [BZOJ1088][SCOI2005]扫雷Mine
- SQL plus远程登录数据库