typescript - Go中 typescript 解密中的AES加密

标签 typescript go encryption aes

我正在尝试在 typescript 中加密数据并将加密输出传递给 Go 中的解密函数,但是 Go 中的输出与 typescript 中的输入不匹配,那么问题是什么?

这是我的 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));

这是我的围棋代码:

func main() {
    d2, _ := Decrypt("VMlk9qzp2BKZi5wZjlzst2iwEre0uD/VHVc6xm2bhXY=", "37303631373337333233333133323333")
    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]

    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
}

最佳答案

  • 请使用相同的 key “7061737323313233”。
  • 使用相同的 iv。
  • 十二月全文。
  • 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
    }
    
    

    关于typescript - Go中 typescript 解密中的AES加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58729774/

    相关文章:

    go - 如何在 Go 1.18 中对 nil 值进行模糊测试?

    java - 解密时出现错误填充异常,但仍然有效

    azure - TypeScript 生成的 javascript 文件未从 Visual Studio 在线 CD 版本上传到 Web 服务器

    angular - 如何避免在 Angular 中使用 *ngFor?

    Golang toString 用于接口(interface)和结构实现

    unit-testing - 在 go test 文件中使用包级变量

    Java Crypto Api - 如何选择密码提供者

    string - 来自字符串的不可逆唯一 ID

    对象数组中的 Angular 更新对象

    TypeScript 类使用私有(private)函数实现类