为了账号安全,请及时绑定邮箱和手机立即绑定

跨平台 AES CryptLib

跨平台 AES CryptLib

Go
德玛西亚99 2022-07-11 16:54:17
我正在尝试在 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
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

看起来您需要将您的key和text字符串正确解码为字节切片,而不仅仅是转换它们。下面的代码有效,虽然我不确定解码后的消息应该是什么样子......


package main


import (

    "encoding/hex"

    "encoding/base64"

    "crypto/cipher"

    "crypto/sha256"

    "crypto/aes"

)


func main() {

    iv := "Vmr-uU5mA2_Zr_13"

    key := "<Secret_Key>"

    ciphertext := "bvtkHfZiTsY0CX6QmHhCboBwXeY9RZVPpdhhdIy6aSwCTVI7YiEGha1aXTIKY4BocGdNIbWkreQHZcTk4WE6F2tQLoVyWERYCGZotbDzxxs="

    

    hash := sha256.Sum256([]byte(key))

    key = hex.EncodeToString(hash[:])[:32]

    

    btext, err := base64.StdEncoding.DecodeString(ciphertext)

    if err != nil {

        println("Error decoding cipertext: ", err.Error())

        return

    }


    aesCipher, err := aes.NewCipher([]byte(key))

    if err != nil {

        println("Error creating cipher: ", err.Error())

        return

    }


    cipher.NewCBCDecrypter(aesCipher, []byte(iv)).

        CryptBlocks(btext, btext)

    

    println("Result: ", string(btext))

}


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号