我是靠谱客的博主 不安台灯,最近开发中收集的这篇文章主要介绍golang aes加密ecb模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

golang官方不支持ecb模式,因业务需要自编一段ecb

package myAes
import (
"bytes"
"crypto/aes"
"crypto/md5"
"encoding/hex"
"fmt"
"strings"
)
func padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
func secretKeySpec(skey []byte) (key string) {
//key转换
has := md5.Sum(skey)
sky := fmt.Sprintf("%X", has)
return strings.ToUpper(sky)
}
func AesEncrypt(origData []byte, skey []byte) (string, error) {
// aes 加密
skeySpec := secretKeySpec(skey)
/**AES 加密**/
//key只能是 16 24 32长度
block, err := aes.NewCipher([]byte(skeySpec))
if err != nil {
return "", err
}
//padding
origData = padding(origData, block.BlockSize())
//存储每次加密的数据
//分组分块加密
buffer := bytes.NewBufferString("")
tmpData := make([]byte, block.BlockSize()) //存储每次加密的数据
for index := 0; index < len(origData); index += block.BlockSize() {
block.Encrypt(tmpData, origData[index:index+block.BlockSize()])
buffer.Write(tmpData)
}
return strings.ToUpper(hex.EncodeToString(buffer.Bytes())), nil
}
func AesDecrypt(text string, skey []byte) (string, error) {
// aes解密
skeySpec := secretKeySpec(skey)
block, err := aes.NewCipher([]byte(skeySpec))
if err != nil {
return "", err
}
src, _ := hex.DecodeString(text)
/**AES 解密**/
buffer := bytes.NewBufferString("")
tmpData := make([]byte, block.BlockSize())
for index := 0; index < len(src); index += block.BlockSize() {
block.Decrypt(tmpData, src[index:index+block.BlockSize()])
buffer.Write(tmpData)
}
// 去掉末尾非打印控制字符
var deByte []byte
for i := len(buffer.Bytes()); i > 0; i-- {
if buffer.Bytes()[i-1] >= 32 {
deByte = buffer.Bytes()[:i]
break
}
}
return strings.TrimSpace(string(deByte)), nil
}

最后

以上就是不安台灯为你收集整理的golang aes加密ecb模式的全部内容,希望文章能够帮你解决golang aes加密ecb模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部