DES加密ECB(模式) golang

摘要:
下面贴上golang版的DESECB加密解密代码。

Java默认DES算法使用DES/ECB/PKCS5Padding,而golang认为这种方式是不安全的,所以故意没有提供这种加密方式,那如果我们还是要用到怎么办?下面贴上golang版的DES ECB加密解密代码(默认对密文做了base64处理)。

DES加密ECB(模式) golang第1张DES加密ECB(模式) golang第2张
package main

import (
    log "ad-service/alog"
    "bytes"
    "crypto/des"
    "encoding/base64")

func EntryptDesECB(data, key []byte) string{
    if len(key) > 8{
        key = key[:8]
    }
    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 != 0{
        log.Error("EntryptDesECB Need a multiple of the blocksize")
        return ""}
    out := make([]byte, len(data))
    dst := out
    for len(data) > 0{
        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) > 8{
        key = key[:8]
    }
    block, err :=des.NewCipher(key)
    if err !=nil {
        log.Errorf("DecryptDES NewCipher error[%v]", err)
        return ""}
    bs :=block.BlockSize()
    if len(data)%bs != 0{
        log.Error("DecryptDES crypto/cipher: input not full blocks")
        return ""}
    out := make([]byte, len(data))
    dst := out
    for len(data) > 0{
        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)
    returnappend(ciphertext, padtext...)
}

func PKCS5UnPadding(origData []byte) []byte{
    length :=len(origData)
    unpadding := int(origData[length-1])
    return origData[:(length -unpadding)]
}
View Code

免责声明:文章转载自《DES加密ECB(模式) golang》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASP数组全集,多维数组和一维数组Labview 中的类下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Golang反射上篇

目录 1、反射的定义 2、反射的基础数据类型 3、Type 4、Value 5、反射三大定律 5.1 反射第一定律 5.2 反射第二定律 5.3 反射第三定律 6、反射常用的API 6.1 获取type类型 6.2 获取Field信息 6.3 获取method信息 6.4 获取函数信息 6.5 赋值和转换关系 6.6 是否实现接口 6.7 v...

3DESC加密算法

3DESC 请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异,java的3des加密采用的是"DESede/CBC/PKCS5Padding"规则,所以对应的C#规则是"PaddingMode.PKCS7和CipherMode.CBC",使用CBC模式的话在C#下必须传入加密...

手把手教你用notepad++搭建golang开发环境实战教程

Notepad++ 配置 Golang 开发环境 Notepad++小而轻便,对电脑配置要求低,下午详细讲述,如何用用notepad++搭建golang开发环境 注:本机安装都是win10,64位环境下进行的,网上看了很多文章,都讲解的很局限,步骤不详细,缺少截图及安装文件下载路径 第一步:先安装go语言环境 go环境安装包下载地址:https://gol...

Golang项目的测试实践

Golang项目的测试实践 最近有一个项目,链路涉及了4个服务。最核心的是一个配时服务。要如何对这个项目进行测试,保证输出质量,是最近思考和实践的重点。这篇就说下最近这个实践的过程总结。 测试金字塔 按照Mike Cohn提出的“测试金字塔”概念,测试分为4个层次 最下面是单元测试,单元测试对代码进行测试。再而上是集成测试,它对一个服务的接口进行测试。继...

用Golang手写一个RPC,理解RPC原理

代码结构 . ├── client.go ├── coder.go ├── coder_test.go ├── rpc_test.go ├── server.go ├── session.go └── session_test.go 代码 client.go package rpc import ( "net" "reflect" ) // rp...

Golang 编码规范

原文链接:https://github.com/golang/go/wiki/CodeReviewComments1)用 goimport 代替 gofmt2) https://golang.org/doc/effective_go.html#commentary注释单独一行,开始于描述的名字,结束于。。没看明白3)context.Context的值包含:...