Golang实现MetaMask Vault解密失败求助:消息认证错误排查
MetaMask钱包解密报错:
cipher: message authentication failed 我尝试解密MetaMask钱包,官方工具可正常解密,但用Go实现的解密代码返回空结果,且报错cipher: message authentication failed。我参考了一个可完成该解密任务的Python库逻辑,但移植后无法解决问题,希望有人帮忙排查。
钱包JSON
{"data":"rERJJccSBNfPzRHk32JxDQkpwV7bnMk3PULFnQz8DjKkGiFfmW81ED4dJAG0HHGfIy294AnJYxr7MG9IsVgS0bPD6yVBsfqw40mcsNuBIQLmNXcsw+zCxCnjbqGy2zf5pzvdt76mb4CHtTc7A2UhjApjWaiptR/rxosjkjHUrms0g5kGjr1gWzyZKwI/7u846WUQRRa1PNFX+qnQXWcCAXtjqIJrf762d5+a4rB8bCW3awHHkQm8kroH6PgiX3mYiRZUbDGUSD0DKIZCfHRj6BsndimeNYB0VfX82x0yzoS9D0fagOg1/ETn9cYNplIWT8L39Z9PBxueOOzfcRnQV/SEMozqiHk2SUC0Y1HhoXk4/L1WKF9pJdrCklP6zKaf7RTlXTFqOYkueEf/LGlPQ8MWeq4Nm1zADgJwWiSVWx5Jl6UrOvxNLTd0C4ZPFdunVVPkzYjzBVLgOYrE3udhWF+wqfJQZ6BXu8N5Y1bdoZEtKJ+SPuc+aVBd5Esz0q+mY/WIJswO5laY","iv":"xPb05MBtb23xPtfWxgCLzQ==","salt":"ggTRTywqaFJGxYAj73woAkA6mkjkY6q779u63DKLr3g="}
密码
tester123
我的Go实现代码
package main import ( "crypto/aes" "crypto/cipher" "crypto/sha256" "encoding/base64" "encoding/json" "fmt" "golang.org/x/crypto/pbkdf2" ) type Payload struct { Data string `json:"data"` Salt string `json:"salt"` Iv string `json:"iv"` } var wallet = []byte(`{"data":"rERJJccSBNfPzRHk32JxDQkpwV7bnMk3PULFnQz8DjKkGiFfmW81ED4dJAG0HHGfIy294AnJYxr7MG9IsVgS0bPD6yVBsfqw40mcsNuBIQLmNXcsw+zCxCnjbqGy2zf5pzvdt76mb4CHtTc7A2UhjApjWaiptR/rxosjkjHUrms0g5kGjr1gWzyZKwI/7u846WUQRRa1PNFX+qnQXWcCAXtjqIJrf762d5+a4rB8bCW3awHHkQm8kroH6PgiX3mYiRZUbDGUSD0DKIZCfHRj6BsndimeNYB0VfX82x0yzoS9D0fagOg1/ETn9cYNplIWT8L39Z9PBxueOOzfcRnQV/SEMozqiHk2SUC0Y1HhoXk4/L1WKF9pJdrCklP6zKaf7RTlXTFqOYkueEf/LGlPQ8MWeq4Nm1zADgJwWiSVWx5Jl6UrOvxNLTd0C4ZPFdunVVPkzYjzBVLgOYrE3udhWF+wqfJQZ6BXu8N5Y1bdoZEtKJ+SPuc+aVBd5Esz0q+mY/WIJswO5laY","iv":"xPb05MBtb23xPtfWxgCLzQ==","salt":"ggTRTywqaFJGxYAj73woAkA6mkjkY6q779u63DKLr3g="}`) func main() { var payload Payload json.Unmarshal(wallet, &payload) iv, _ := base64.StdEncoding.DecodeString(payload.Iv) salt, _ := base64.StdEncoding.DecodeString(payload.Salt) data, _ := base64.StdEncoding.DecodeString(payload.Data) // Remove last 16 symbols, this was done in the hashdecrypt python library data = data[:len(data)-len(iv)] password := "tester123" key := pbkdf2.Key([]byte(password), salt, 1000, 32, sha256.New) block, _ := aes.NewCipher(key) // In MetaMask's vault-decryptor, the nonce (initialization vector) size is fixed at 16 bytes. gcm, _ := cipher.NewGCMWithNonceSize(block, len(iv)) plaintext, err := gcm.Open(nil, iv, data, nil) fmt.Println(err) fmt.Println(plaintext) }
运行结果
cipher: message authentication failed []
我尝试了多种修改,但问题依然存在,希望能得到帮助。
内容的提问来源于stack exchange,提问作者Mowshon
相关产品推荐
相关产品推荐

