douning5041
2018-01-02 07:56
浏览 214
已采纳

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

I know using openssl (tested with OpenSSL 1.1.0g), the following stanza works to decrypt enc.ts, mimetype: video/MP2T, to a ffplay playable clear.ts h264 segment:

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

Though with Golang's https://golang.org/pkg/crypto/cipher/#NewCBCDecrypter I'm very confused how the hexadecimal key and iv are set as byte slices, whether block sizes are a factor and how to load and write out the file.

I have tried:

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
", ciphertext)
}

But that results in a panic: cipher.NewCBCDecrypter: IV length must equal block size. What am I missing?

图片转代码服务由CSDN问答提供 功能建议

我知道使用openssl(已通过OpenSSL 1.1.0g测试),以下节用于解密 enc.ts ,模仿类型:视频/ 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/#NewCB​​CDecrypter 我非常困惑如何将十六进制密钥和iv设置为字节片,是否块大小是一个因素以及如何加载和写入文件。

我已经尝试过:

 包main 
 
import(
“ crypto / aes” 
“ crypto / cipher”  
“编码/十六进制” 
“ fmt” 
“ io / ioutil” 
)
 
func checkerror(错误错误){
如果错误!= ni  l {
 panic(err)
} 
} 
 
func main(){
 key,err:= hex.DecodeString(“ 9e8c69bcaafa6b636e076935e29986b5”)
 checkerror(err)
 iv,err:=  hex.DecodeString(“ 353833383634”)
 checkerror(err)
密文,err:= ioutil.ReadFile(“ enc.ts”)
 checkerror(err)
块,err:= aes.NewCipher(key)  
 checkerror(err)
模式:= cipher.NewCB​​CDecrypter(block,iv)
模式.CryptBlocks(密文,密文)
 fmt.Printf(“%s 
”,密文)
} 
 <  / code>  
 
 

但这会导致 panic:cipher.NewCB​​CDecrypter:IV长度必须等于块大小。 我想念什么?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • doujugu1722 2018-01-02 08:37
    已采纳

    Your iv is indeed too short so the openssl just padded zero for you:

    openssl aes-128-cbc -d -in enc.ts -out clear.ts -iv 353833383634 -K 9e8c69bcaafa6b636e076935e29986b5 -nosalt -P
    key=9E8C69BCAAFA6B636E076935E29986B5
    iv =35383338363400000000000000000000
    
    已采纳该答案
    打赏 评论

相关推荐 更多相似问题