跨平台 AES CryptLib

我正在尝试在 js 中转换 Crypt Lib的逻辑我有现有的 android 应用程序并且 API 是 c 语言,我想转换加密和解密逻辑。


我尝试了多种变体,您可以检查代码:尝试过的代码


我有一个要解密的示例数据,数据是:


{"Data":"bvtkHfZiTsY0CX6QmHhCboBwXeY9RZVPpdhhdIy6aSwCTVI7YiEGha1aXTIKY4BocGdNIbWkreQHZcTk4WE6F2tQLoVyWERYCGZotbDzxxs=","IV":"Vmr-uU5mA2_Zr_13"}

在这里,我在 Data 和 IV 中有加密数据,所以当我尝试解密这些数据时,我找不到任何解决方案。所有的加密和解密功能都在 csharp 和 android 代码中。但我想在 golang 中转换相同的逻辑。


Node中的逻辑


我试过这段代码:


    iv := []byte("Vmr-uU5mA2_Zr_13")

    key := []byte("<Secret_Key")


    text := []byte("bvtkHfZiTsY0CX6QmHhCboBwXeY9RZVPpdhhdIy6aSwCTVI7YiEGha1aXTIKY4BocGdNIbWkreQHZcTk4WE6F2tQLoVyWERYCGZotbDzxxs=")


    cipherBlock, err := aes.NewCipher(key)

    if err != nil {

        log.Fatal(err)

    }


    cipher.NewCBCDecrypter(cipherBlock, iv).CryptBlocks(text, text)

    fmt.Println(string(text))

代码的完整链接,我收到错误:


crypto/aes: invalid key size 64


德玛西亚99
浏览 146回答 1
1回答

宝慕林4294392

看起来您需要将您的key和text字符串正确解码为字节切片,而不仅仅是转换它们。下面的代码有效,虽然我不确定解码后的消息应该是什么样子......package mainimport (&nbsp; &nbsp; "encoding/hex"&nbsp; &nbsp; "encoding/base64"&nbsp; &nbsp; "crypto/cipher"&nbsp; &nbsp; "crypto/sha256"&nbsp; &nbsp; "crypto/aes")func main() {&nbsp; &nbsp; iv := "Vmr-uU5mA2_Zr_13"&nbsp; &nbsp; key := "<Secret_Key>"&nbsp; &nbsp; ciphertext := "bvtkHfZiTsY0CX6QmHhCboBwXeY9RZVPpdhhdIy6aSwCTVI7YiEGha1aXTIKY4BocGdNIbWkreQHZcTk4WE6F2tQLoVyWERYCGZotbDzxxs="&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; hash := sha256.Sum256([]byte(key))&nbsp; &nbsp; key = hex.EncodeToString(hash[:])[:32]&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; btext, err := base64.StdEncoding.DecodeString(ciphertext)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; println("Error decoding cipertext: ", err.Error())&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; aesCipher, err := aes.NewCipher([]byte(key))&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; println("Error creating cipher: ", err.Error())&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; cipher.NewCBCDecrypter(aesCipher, []byte(iv)).&nbsp; &nbsp; &nbsp; &nbsp; CryptBlocks(btext, btext)&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; println("Result: ", string(btext))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go