如何使用Golang解密AES加密传输流段?

时间:2018-01-02 07:56:41

标签: go aes

我知道使用openssl(使用OpenSSL 1.1.0g测试),以下节可用于解密enc.ts,mimetype:video / MP2T,到ffplay可播放的clear.ts h264段:

openssl aes-128-cbc -d -in enc.ts -out clear.ts -iv 353833383634 -K 9e8c69bcaafa6b636e076935e29986b5 -nosalt

虽然对于Golang的https://golang.org/pkg/crypto/cipher/#NewCBCDecrypter我非常困惑如何将十六进制密钥和iv设置为字节切片,无论块大小是一个因素以及如何加载和写出文件。

我试过了:

package main

import (
        "crypto/aes"
        "crypto/cipher"
        "encoding/hex"
        "fmt"
        "io/ioutil"
)

func checkerror(err error) {
        if err != nil {
                panic(err)
        }
}

func main() {
        key, err := hex.DecodeString("9e8c69bcaafa6b636e076935e29986b5")
        checkerror(err)
        iv, err := hex.DecodeString("353833383634")
        checkerror(err)
        ciphertext, err := ioutil.ReadFile("enc.ts")
        checkerror(err)
        block, err := aes.NewCipher(key)
        checkerror(err)
        mode := cipher.NewCBCDecrypter(block, iv)
        mode.CryptBlocks(ciphertext, ciphertext)
        fmt.Printf("%s\n", ciphertext)
}

但这导致panic: cipher.NewCBCDecrypter: IV length must equal block size。我错过了什么?

1 个答案:

答案 0 :(得分:4)

你的iv确实太短了,所以openssl只为你填0:

openssl aes-128-cbc -d -in enc.ts -out clear.ts -iv 353833383634 -K 9e8c69bcaafa6b636e076935e29986b5 -nosalt -P
key=9E8C69BCAAFA6B636E076935E29986B5
iv =35383338363400000000000000000000