我像这样在Node.js中加密了一个字符串。如何解密在nodejs中加密的golang中的AES256位密码?
var cipher = crypto.createCipheriv(
"aes256",
"<A Buffer of length 32>",
"79b67e539e7fcaefa7abf167de5c06ed"
);
我注意到nodejs中的一个缓冲区就像是十六进制,但每连续2个字符都是成对的。所以,如果我将它转换为十六进制,它的长度是一半。
实施例:
缓冲液:
<Buffer c3 80 36 f6 51 57 cb 6d b0 e8 fd 85 5a a2 8a da 07 4b e7 19 17 d1 c8 ee dc 2a e4 d8 5e 3c 9d a6>
己烷:现在
c38036f65157cb6db0e8fd855aa28ada074be71917d1c8eedc2ae4d85e3c9da6
,我在AES256使用中的密钥不能是长度为64以下的,缓冲器的长度是32和十六进制的长度是64.
我想解密这个密码在golang中,我将不得不使用这个密钥和iv t o解密它。
golang中的aes取决于密钥的大小,当它看到一个长度为64的密钥时,会引发一个错误,说明Invalid key length
。
如何在golang中解密它?还有就是我目前的方案中去:https://play.golang.org/p/SoXOz3XIPK
package main
import (
"crypto/aes"
"crypto/cipher"
"fmt"
"log"
)
func main() {
encKey := "c38036f65157cb6db0e8fd855aa28ada074be71917d1c8eedc2ae4d85e3c9da6"
iv := "79b67e539e7fcaefa7abf167de5c06ed"
cipherText := "c02eccfc514a0b7fae830586dd56e0fcebb81fc49f41fa6dedf099c3645793bef7ec7075eca30063f9c0ef395d5ee2d44e4f3490114280abb7cf86d6eb525e2ec9bd2b781388986480f8b3df95f7b10e"
block, err := aes.NewCipher([]byte(encKey))
if err != nil {
log.Fatalf("%s", err)
}
decrypter := cipher.NewCFBDecrypter(block, []byte(iv))
decrypted := make([]byte, 1000)
decrypter.XORKeyStream(decrypted, []byte(cipherText))
fmt.Printf("%s\n", string(decrypted))
}
这是如何 “缓冲” 节点和去之间共享? – GPX
@GPX不是。 cookie在nodejs中是这样加密的,我需要在golang中解密它,这样我才能读取存储在它中的数据。 –
Cookie的值本质上是一个字符串。它的长度是多少? – GPX