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

Go 中打字稿解密中的 AES 加密

Go 中打字稿解密中的 AES 加密

Go
慕神8447489 2023-07-31 17:16:04
我正在尝试加密 TypeScript 中的数据,并将加密输出传递给 Go 中的解密函数,但 Go 中的输出与 TypeScript 中的输入不匹配,那么问题是什么?这是我的打字稿代码:import * as CryptoJS from 'crypto-js';var key = CryptoJS.enc.Utf8.parse('7061737323313233');var iv = CryptoJS.enc.Utf8.parse('7061737323313233');var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse("Im new in aes encryption"), key,    {        keySize: 128 / 8,        iv: iv,        mode: CryptoJS.mode.CBC,        padding: CryptoJS.pad.Pkcs7    });var decrypted = CryptoJS.AES.decrypt(encrypted, key, {    keySize: 128 / 8,    iv: iv,    mode: CryptoJS.mode.CBC,    padding: CryptoJS.pad.Pkcs7});console.log('Encrypted :' + encrypted);console.log('Key :' + encrypted.key);console.log('Salt :' + encrypted.salt);console.log('iv :' + encrypted.iv);console.log('Decrypted : ' + decrypted);console.log('utf8 = ' + decrypted.toString(CryptoJS.enc.Utf8));这是我的 Go 代码:func main() {    d2, _ := Decrypt("VMlk9qzp2BKZi5wZjlzst2iwEre0uD/VHVc6xm2bhXY=", "37303631373337333233333133323333")    fmt.Println(d2)}// Decrypt decrypts cipher text string into plain text stringfunc Decrypt(encrypted string, CIPHER_KEY string) (string, error) {    key := []byte(CIPHER_KEY)    cipherText, _ := base64.StdEncoding.DecodeString(encrypted) ////hex.DecodeString(encrypted)    block, err := aes.NewCipher(key)    if err != nil {        panic(err)    }    if len(cipherText) < aes.BlockSize {        panic("cipherText too short")    }    iv := cipherText[:aes.BlockSize]    cipherText = cipherText[aes.BlockSize:]    if len(cipherText)%aes.BlockSize != 0 {        panic("cipherText is not a multiple of the block size")    }    mode := cipher.NewCBCDecrypter(block, iv)    mode.CryptBlocks(cipherText, cipherText)    cipherText, _ = pkcs7.Pad(cipherText, aes.BlockSize)    return fmt.Sprintf("%s", cipherText), nil}
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

  1. 请使用相同的密钥“7061737323313233”。

  2. 使用相同的静脉注射。

  3. 十二月全文。

func main() {


    d2, err := Decrypt("VMlk9qzp2BKZi5wZjlzst2iwEre0uD/VHVc6xm2bhXY=", "7061737323313233")

    if err != nil {

        log.Println(err)

        return

    }

    fmt.Println(d2)


}


// Decrypt decrypts cipher text string into plain text string

func Decrypt(encrypted string, CIPHER_KEY string) (string, error) {

    key := []byte(CIPHER_KEY)

    cipherText, _ := base64.StdEncoding.DecodeString(encrypted) ////hex.DecodeString(encrypted)


    block, err := aes.NewCipher(key)

    if err != nil {

        panic(err)

    }


    if len(cipherText) < aes.BlockSize {

        panic("cipherText too short")

    }

    // iv := cipherText[:aes.BlockSize]

    iv := []byte("7061737323313233")


    cipherText = cipherText[:]

    if len(cipherText)%aes.BlockSize != 0 {

        panic("cipherText is not a multiple of the block size")

    }


    // cipherText, _ = Pad(cipherText, aes.BlockSize)


    mode := cipher.NewCBCDecrypter(block, iv)

    mode.CryptBlocks(cipherText, cipherText)


    return fmt.Sprintf("%s", cipherText), nil

}


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信