1
haah 2022-05-28 19:40:55 +08:00
什么叫做原始版本的 AES ?
|
2
xiaoyanbot OP @haah 就是 go 标准库 aes 类库使用加密方法,文档: https://pkg.go.dev/crypto/aes 样例程序: https://www.developer.com/languages/cryptography-in-go/
|
3
xiaoyanbot OP 上面样例程序连接:Go Cryptography Code Examples 小标题部分,为使用 crypto/aes 的样例。
|
4
unixeno 2022-05-28 20:33:48 +08:00 via Android
@xiaoyanbot 你这个代码里用的是 32byte 的 key ,对应 go 文档里写的就是用的 aes-256
你用 aes-128 当然不行 |
5
boboliu 2022-05-28 23:56:34 +08:00
openssl enc -e -aes256
多学习,请 |
6
xiaoyanbot OP @unixeno 使用 OpenSSL 的 AES-256-ECB 模式,试了,也是对不上
这是 OpenSSL 加密出来的 ~~~ MZ1PplXtVDtKoNHv3DYZ2MuvVv6qt2Dsi0GY+VDa6VU= This is a secret ~~~ |
7
xiaoyanbot OP @boboliu
输入 [openssl enc -e -aes256] 提示是这样子的: enter aes-256-cbc encryption password: 也就是加密使用的 cbc 模式, 但 aes-256-cbc 模式加密出来的是: ~~~ MZ1PplXtVDtKoNHv3DYZ2K94NCKc0oz8Otbb8hQlvbI= This is a secret ~~~ 还是和 go 加密出来的不一样 这是 go 加密出来的: 代码来自上面的样例程序 Go Cryptography Code Examples 小标题部分 ~~~ Encrypted Message: 319d4fa655ed543b4aa0d1efdc3619d8 Decrypted Message: This is a secret ~~~ |
8
huangya 2022-05-29 10:06:29 +08:00
@xiaoyanbot 看得我有点迷糊,你举例应该要带密钥吧,没有密钥怎么举例?不同的密钥得出的密文不一样吧
|
9
xiaoyanbot OP @huangya 在这里哈:
crypto/aes 样例程序:www.developer.com/languages/cryptography-in-go/ [Go Cryptography Code Examples] 小标题。 加密的信息是:This is a secret 使用的 key 是:this_must_be_of_32_byte_length!! 感谢一块分析 |
10
GeruzoniAnsasu 2022-05-29 11:57:02 +08:00
|
11
GuuJiang 2022-05-29 11:59:42 +08:00 via iPhone
不要自己发明概念,就是标准的无填充 aes-256-ecb 而已
echo -n "This is a secret" | openssl enc -aes-256-ecb -nopad -K 746869735f6d7573745f62655f6f665f33325f627974655f6c656e6774682121 | xxd -p |
12
GuuJiang 2022-05-29 12:02:34 +08:00 via iPhone
顺便附上解密
echo -n 319d4fa655ed543b4aa0d1efdc3619d8 | xxd -r -p | openssl enc -aes-256-ecb -d -nopad -K 746869735f6d7573745f62655f6f665f33325f627974655f6c656e6774682121 |
13
xiaoyanbot OP |
14
xiaoyanbot OP 我再试试:
明文:This_is_a_secret key:password_16_byte [key 字符串转 hex:70617373776f72645f31365f62797465] echo -n "This_is_a_secret" | openssl enc -aes-128-ecb -nopad -K 70617373776f72645f31365f62797465 | xxd -p 输出:27ec7ec439fb0be1fa6ac4e6c06cf048 echo -n "This_is_a_secret" | openssl enc -aes-128-ecb -K 70617373776f72645f31365f62797465 | xxd -p 输出:27ec7ec439fb0be1fa6ac4e6c06cf04899c3268c435d6a1ba2b69d2b4fec e22a 请教下这个 -nopad 填充参数 ,具体是用的什么方法填充? 谢谢 @GuuJiang @GeruzoniAnsasu |
15
GuuJiang 2022-05-29 16:21:57 +08:00 via iPhone
@xiaoyanbot 故名思义就是不填充,但是有个限制就是数据必须正好要是 16 的整数倍,所以通常都不会使用这个模式的,而是使用 pkcs5 填充,因为你要求得到和你给的 go 示例里完全一致的结果,所以在这个例子里只有 nopad 才能满足,但是真正用于通用场景的话还是应该使用 pkcs5 填充
|