crypto.createcipher(...)
代替吗?但它已被弃用,而且感觉填充的东西很重要。,我对加密一无所知。欢迎任何提示。,注意:在go函数中,
s.sessionkey
与node.js中的session_key = "59e8ca4b09f2a19ab5421cf55d604c7c"
的值相同,go 代码在 ecb 模式下应用 aes 并使用 pkcs#7 填充。 aes 变体隐式源自密钥大小,例如aes-128 用于 16 字节密钥。密文返回为 []byte
。,在 nodejs 代码中,明确指定了 aes 变体以及模式,例如aes-128-ecb
。 ecb模式不应用iv,因此必须在createcipheriv()
中指定为null
。使用填充 pkcs#7(默认)。密文可以返回为 buffer
,它最接近 []byte
。,发布的密钥 59e8ca4b09f2a19ab5421cf55d604c7c
看起来像一个十六进制编码的密钥,它是十六进制解码的 16 字节大,因此对应于 aes-128。十六进制解码可以在 go 中使用 encoding/hex 包来实现,例如与 hex.decodestring("59e8ca4b09f2a19ab5421cf55d604c7c")
。,在 ecb 模式下使用 aes-128(16 字节密钥)和 pkcs#7 填充的 nodejs 代码示例:,go 代码使用相同的密钥(十六进制解码)和明文以及密文的 base64 编码给出相同的结果。,为了完整性:密钥也可以采用 utf-8 编码,然后生成 32 字节密钥,例如go 代码中的 key := []byte("59e8ca4b09f2a19ab5421cf55d604c7c")
和 const session_key = buffer.from("59e8ca4b09f2a19ab5421cf55d604c7c", "utf-8")
nodejs 代码。在 nodejs 代码中,还必须应用 aes-256-ecb
。最终,关键规范必须提供有关使用哪种编码的信息。,请注意,ecb 模式不安全。如今,通常使用经过身份验证的加密,例如通过 gcm 模式。,