我知道使用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
。我错过了什么?
答案 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