我知道使用openssl(已测试过OpenSSL 1.1.0g),以下段落可以解密enc.ts,mimetype:video / MP2T,生成可播放的ffplay
清晰的.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长度必须等于块大小
。我错过了什么?