golang aes ecb 加密

HollowKnight · · 4075 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

代码地址:https://github.com/FakerGit/go-tools

加密模式

  • AES ECB模式 PKCS7Padding填充

原理

整个明文分成若干段相同的小段,然后对每一小段进行加密。这个是不安全的,重复的原文块加密后会是重复的结果,很明显暴露明文的模式。

代码

func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
    padding := blockSize - len(ciphertext)%blockSize
    padtext := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(ciphertext, padtext...)
}

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

func EcbDecrypt(data, key []byte) []byte {
    block, _ := aes.NewCipher(key)
    decrypted := make([]byte, len(data))
    size := block.BlockSize()

    for bs, be := 0, size; bs < len(data); bs, be = bs+size, be+size {
        block.Decrypt(decrypted[bs:be], data[bs:be])
    }

    return PKCS7UnPadding(decrypted)
}

func EcbEncrypt(data, key []byte) []byte {
    block, _ := aes.NewCipher(key)
    data = PKCS7Padding(data, block.BlockSize())
    decrypted := make([]byte, len(data))
    size := block.BlockSize()

    for bs, be := 0, size; bs < len(data); bs, be = bs+size, be+size {
        block.Encrypt(decrypted[bs:be], data[bs:be])
    }

    return decrypted
}


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:HollowKnight

查看原文:golang aes ecb 加密

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4075 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传