我像這樣在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