golang中DES/ECB/PKCS5Padding的实现
2016-08-29 16:01
766 查看
场景:google认为DES/ECB/PKCS5Padding ECB加密安全性低,故没有对方开放.但是我们以前的工程使用的DES/ECB/PKCS5Padding算法,并且已经入库了,所以只能自己实现该算法
参考 https://gist.github.com/cuixin/10612934 通过他修改而来
另外java和golang byte数组转化也是一个坑 @see http://blog.csdn.net/hai046/article/details/52353963
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
相关文章推荐
- JAVA DES加密(DES/ECB/PKCS5Padding)和C#加密对应设置
- java中DES加密(DES/ECB/pkcs5padding)的代码分享
- php中实现3DES算法(ECB加密模式PKCS5Padding填充)
- AES/ECB/PKCS5Padding
- 基于CBC模式和PKCS5padding的DES加解密模块
- java和iOS的DES/EBC/PKCS5Padding
- java加密之AES/ECB/PKCS5Padding
- 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- AES128 ECB加密pkcs5padding补码
- JAVA实现DES的ECB/CBC的加密算法
- AES加密(AES/ECB/PKCS5Padding)key UTF8 取前十六个字节
- AES - 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- AES-256-CBC-PKCS5Padding用c语言实现,并支持Android手机的调用
- node.js AES/ECB/PKCS5Padding 与其他语言的加密解密通用
- PHP和Java AES 128 ECB 加解密(PKCS5Padding)
- AES/ECB/PKCS5Padding/PKCS7Padding 128位密钥(带密钥补位功能)加密解密
- python实现PKCS5Padding
- python实现PKCS5Padding
- java实现基于PKCS5Padding填充方式的AES加解密
- OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果同样