这是我在Node.js中拥有的:
var crypto = require('crypto') function encryptstring(str) { var cipher = crypto.createCipheriv('aes-256-cbc', 'NFd6N3v1nbL47FK0xpZjxZ7NY4fYpNYd', 'TestingIV1234567'), encrypted = cipher.update(str, 'utf-8', 'base64'); encrypted += cipher.final('base64'); return encrypted; } console.log(encryptstring("Testing 111111111111111111111111111111111111111111"))
返回: w2f0vBP2hRfgVqssqOluk68Qxkc9LXFESc0ZGzPBq3p6f/x/LbwBbg1XOoRr7I/DAtESJGdweKG6nL9m8RfewA==
w2f0vBP2hRfgVqssqOluk68Qxkc9LXFESc0ZGzPBq3p6f/x/LbwBbg1XOoRr7I/DAtESJGdweKG6nL9m8RfewA==
这就是我在Go中所拥有的:
package main import ( "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" ) // decrypt from base64 to decrypted string func decrypt(key []byte, iv []byte, cryptoText string) string { ciphertext, _ := base64.URLEncoding.DecodeString(cryptoText) block, err := aes.NewCipher(key) if err != nil { panic(err) } if len(ciphertext) < aes.BlockSize { panic("ciphertext too short") } ciphertext = ciphertext[aes.BlockSize:] stream := cipher.NewCFBDecrypter(block, iv) stream.XORKeyStream(ciphertext, ciphertext) return fmt.Sprintf("%s", ciphertext) } func main() { encKey := "NFd6N3v1nbL47FK0xpZjxZ7NY4fYpNYd" iv := "TestingIV1234567" stringtodecrypt := "w2f0vBP2hRfgVqssqOluk68Qxkc9LXFESc0ZGzPBq3p6f/x/LbwBbg1XOoRr7I/DAtESJGdweKG6nL9m8RfewA==" stringtodecrypt = decrypt([]byte(encKey), []byte(iv), stringtodecrypt) fmt.Println(string(stringtodecrypt)) }
最终返回 _▒▒▒6▒▒d,O▒ob"▒
_▒▒▒6▒▒d,O▒ob"▒
许多Go代码都来自https://gist.github.com/manishtpatel/8222606
我也尝试过此方法:如何在golang中解密在nodejs中加密的AES256位密码?(hex.DecodeString在这种情况下,无需进行一些修改),但会抛出错误panic: crypto/cipher: inputnot full blocks
hex.DecodeString
panic: crypto/cipher: inputnot full blocks
这是我尝试的代码:
func main() { encKey := "NFd6N3v1nbL47FK0xpZjxZ7NY4fYpNYd" iv := "TestingIV1234567" stringtodecrypt := "w2f0vBP2hRfgVqssqOluk68Qxkc9LXFESc0ZGzPBq3p6f/x/LbwBbg1XOoRr7I/DAtESJGdweKG6nL9m8RfewA==" block, err := aes.NewCipher([]byte(encKey)) if err != nil { panic(err) } mode := cipher.NewCBCDecrypter(block, []byte(iv)) mode.CryptBlocks([]byte(stringtodecrypt), []byte(stringtodecrypt)) fmt.Println(string(stringtodecrypt)) }
我搜索了很多东西,但似乎无法弄清楚。
我究竟做错了什么?
您的第二次尝试更近了,但是您没有首先解码base64字符串。
如果按照密码包中的CBCDecrypter示例进行操作,则将具有以下内容:
CBCDecrypter
encKey := "NFd6N3v1nbL47FK0xpZjxZ7NY4fYpNYd" iv := "TestingIV1234567" ciphertext, err := base64.StdEncoding.DecodeString("w2f0vBP2hRfgVqssqOluk68Qxkc9LXFESc0ZGzPBq3p6f/x/LbwBbg1XOoRr7I/DAtESJGdweKG6nL9m8RfewA==") if err != nil { panic(err) } block, err := aes.NewCipher([]byte(encKey)) if err != nil { panic(err) } if len(ciphertext)%aes.BlockSize != 0 { panic("ciphertext is not a multiple of the block size") } mode := cipher.NewCBCDecrypter(block, []byte(iv)) mode.CryptBlocks(ciphertext, ciphertext) fmt.Printf("%s\n", ciphertext)
https://play.golang.org/p/16wV2UJ5Iw