DES加密ECB(模式) golang
Java默认DES算法使用DES/ECB/PKCS5Padding,而golang认为这种方式是不安全的,所以故意没有提供这种加密方式,那如果我们还是要用到怎么办?下面贴上golang版的DES ECB加密解密代码(默认对密文做了base64处理)。
package main import (
log "ad-service/alog"
"bytes"
"crypto/des"
"encoding/base64"
) func EntryptDesECB(data, key []byte) string {
if len(key) > {
key = key[:]
}
block, err := des.NewCipher(key)
if err != nil {
log.Errorf("EntryptDesECB newCipher error[%v]", err)
return ""
}
bs := block.BlockSize()
data = PKCS5Padding(data, bs)
if len(data)%bs != {
log.Error("EntryptDesECB Need a multiple of the blocksize")
return ""
}
out := make([]byte, len(data))
dst := out
for len(data) > {
block.Encrypt(dst, data[:bs])
data = data[bs:]
dst = dst[bs:]
}
return base64.StdEncoding.EncodeToString(out)
}
func DecryptDESECB(d, key []byte) string {
data, err := base64.StdEncoding.DecodeString(d)
if err != nil {
log.Errorf("DecryptDES Decode base64 error[%v]", err)
return ""
}
if len(key) > {
key = key[:]
}
block, err := des.NewCipher(key)
if err != nil {
log.Errorf("DecryptDES NewCipher error[%v]", err)
return ""
}
bs := block.BlockSize()
if len(data)%bs != {
log.Error("DecryptDES crypto/cipher: input not full blocks")
return ""
}
out := make([]byte, len(data))
dst := out
for len(data) > {
block.Decrypt(dst, data[:bs])
data = data[bs:]
dst = dst[bs:]
}
out = PKCS5UnPadding(out)
return string(out)
} 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-])
return origData[:(length - unpadding)]
}
DES加密ECB(模式) golang的更多相关文章
- C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...
- Des 加密cbc模式 padding
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...
- C#和PHP加密结果一致的DES加密解密算法。php实现和c#一致的DES加密解密
DES加密算法 des对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密 ...
- C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式
============================================== des cbc 加密 zeropadding填充方式 ======================= ...
- vue DES 加密
安装crypto-js cnpm install crypto-js --save 封装一个des.js ECB模式 import cryptoJs from 'crypto-js' // DES加密 ...
- Android DES加密的CBC模式加密解密和ECB模式加密解密
DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...
- iOS DES ECB 模式加密
//iOS DES ECB 模式加密 #import <CommonCrypto/CommonCryptor.h> ,,,,,,,}; +(NSString *) encryptUseDE ...
- DES加密模式详解
DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...
- Golang之AES/DES加密解密
AES/DES加密/解密涉及4个概念:1. Block, 也叫分组, 相应加密/解密的算法. 2. BlockMode, 模式, 相应加密/解密的处理.3. InitalVectory, 初始向量4. ...
随机推荐
- angularjs(显示和隐身) 依赖注入
1.angularjs 隐身参数注入control: 1.control名称 , 2.function,在function内部直接传递参数和方法. var myapp=angular.model(&q ...
- java中的超类是什么
超类(SuperClass) :用java术语来讲,被继承的类称为超类(SuperClass),也有叫做父类,继承的类称为子类.
- LinkedList类 和ArrayList类
1)LinkedList类 LinkedList实现了List接口,允许null元素.此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部.这 ...
- 2 OpenWrt路由器系统开发与网页设计
https://www.zhongkerd.com/news/content-729.html 摘 要: 目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户 ...
- FreeHttp (a fiddler add in to temper the http)
introduction FreeHttp is a Fiddler plugin. With FreeHttp you can modify the request or response mess ...
- CodeBlocks卸载后重装 编译c文件提示错误信息“No such file or directory”
编译最简单的helloworld程序,提示第一行#include<stdio.h> 找不到头文件. 解决方法: 再次卸载CodeBlocks后,将之前的配置文件删除. 路径:C:\User ...
- Python----逻辑回归
逻辑回归 1.逻辑函数 sigmoid函数就出现了.这个函数的定义如下: sigmoid函数具有我们需要的一切优美特性,其定义域在全体实数,值域在[0, 1]之间,并且在0点值为0.5. 那么,如何将 ...
- flutter 本地存储 (shared_preferences)
Flutter本地存储 和Android.Ios类似,Flutter也支持Preferences(Shared Preferences and NSUserDefaults) .文件.和Sqlite3 ...
- 用WPS查看两篇word文档异同之处
写的合同,后期又有修改,电脑里同样名字的合同有好几个版本,不知道有什么不同,怎么办? 打开wps-->[审阅]-->[比较],剩下的按照提示很容易,略...
- Python——pyqt5——智能提示(lineEdit/conmbobox)
一.文本框智能补全 completer = QtWidgets.QCompleter(data) completer.setCompletionMode(QtWidgets.QCompleter.Po ...