首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GO - Golang AES128欧洲央行解密

GO - Golang AES128欧洲央行解密
EN

Stack Overflow用户
提问于 2022-03-25 08:42:04
回答 1查看 541关注 0票数 0

我在golang中找到了从71614065到ECB中解密AES-128数据的代码片段(注意,块大小为16字节):

代码语言:javascript
复制
package main

import (
    "crypto/aes"
)

func DecryptAes128Ecb(data, key []byte) []byte {
    cipher, _ := aes.NewCipher([]byte(key))
    decrypted := make([]byte, len(data))
    size := 16

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

    return decrypted
}
  • 但我无法理解。我试着在网上搜索完整的密码,但我运气不好。
  • 有人能提供完整的代码或者解释一下吗。
  • 对不起,我是刚来金刚的

我试图在网上搜索,但无法获得完整的代码并理解它。

EN

回答 1

Stack Overflow用户

发布于 2022-04-06 09:46:34

首先,请记住,欧洲央行不安全不能用于真正的加密。话虽如此,下面是代码逐行所做的工作:

代码语言:javascript
复制
cipher, _ := aes.NewCipher([]byte(key))

这将返回一个具有执行AES加密/解密的方法的新对象,该对象使用给定的键。

代码语言:javascript
复制
decrypted := make([]byte, len(data))

这将分配空间来保存解密结果。长度与输入的长度相同。

代码语言:javascript
复制
size := 16

这是AES密码的块大小,以字节为单位。我们也可以在这里写size := cipher.BlockSize()。输入的长度必须是16个字节的倍数。

代码语言:javascript
复制
for bs, be := 0, size; bs < len(data); bs, be = bs+size, be+size { ... }

这会在输入中的16个字节块上迭代。第一个块有start bs = 0和end be = size,我们只是重复地向bsbe添加16以获得所有其他块。

代码语言:javascript
复制
cipher.Decrypt(decrypted[bs:be], data[bs:be])

这使用我们在开始时创建的cipher对象来解密单个块。输入为data[bs:be],输出存储在decrypted[bs:be]中。循环完成后,片decrypted包含解密的明文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71614168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档