2013-04-17 141 views
1

我正在研究一種將AES-128加密應用於HLS流的工具。這裏是我的Ruby代碼至今:將OpenSSL IV轉換爲十六進制?

aes = OpenSSL::Cipher::AES.new(128, :CBC) 
aes.encrypt 
aes_key = aes.random_key 
aes_iv = aes.random_iv 

現在,當我輸出aes_iv,它給了我什麼明確的是,我的shell的環境鬥爭轉化爲文本只是二進制數據。這就說得通了。我需要的是將其轉換爲十六進制表示。

的IV必須在HLS清單文件被表示爲這樣:

#EXT-X-KEY:METHOD=AES-128,URI="crypt0.key",IV=0xdc03cfac7ea13f69dd49c1411c14c264 

在該行上的IV屬性被描述爲這樣:

「的值是一個十六進制整數,指定初始化向量與密鑰一起使用,IV屬性出現在協議版本2中。「

我有兩個問題:

  1. 我怎樣才能確保random_iv是設置一個適當的IV是與HLS規範兼容?
  2. 如何將random_iv的二進制IV輸出轉換爲所需的十六進制值?

我試着這樣做:

aes_iv.unpack("H*")aes_iv.unpack("h*"),返回類似 「4b56da546d807eb0870170b4e03d77dd」,這似乎是正確的。但是,當我將其指定爲IV時,視頻無法播放。

我已經將問題隔離到IV中,就好像我不調用random_iv並指定「00000000000000000000000000000000」的IV,它的工作原理。

回答

0

好吧,看起來我能夠使用aes_iv.unpack(「H *」)工作。我想我正在查看早期失敗試用版的一些較舊的視頻文件。

我很笨,爲什麼H *工程和H *不起作用。我看到這裏有一個描述:http://apidock.com/ruby/String/unpack,這解釋了不同的是低半字節和高半字節,但不知道這裏的區別是什麼。