2013-04-17 5 views
1

Je travaille sur un outil qui applique le cryptage AES-128 aux flux HLS. Voici mon code Ruby jusqu'à présent:Convertir OpenSSL IV en hexadécimal?

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

Maintenant, quand je aes_iv sortie, il me donne ce qui est clairement que les données binaires qui lutte env mon shell pour traduire en texte. Ça a du sens. Ce dont j'ai besoin, c'est de convertir cela en une représentation hexadécimale.

L'IV doit être indiqué dans le fichier manifeste HLS en tant que tel:

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

L'attribut IV sur cette ligne est décrite en tant que telle:

« La valeur est une hexadécimal entier qui spécifie le vecteur d'initialisation à utiliser avec la clé L'attribut IV est apparu dans la version 2 du protocole. "

J'ai deux questions:

  1. Comment puis-je être sûr que random_iv est la fixation d'un bon IV qui est compatible avec la spécification HLS?
  2. Comment puis-je convertir la sortie IV binaire de random_iv à la valeur hexadécimale nécessaire?

J'ai essayé de le faire:

aes_iv.unpack("H*") et aes_iv.unpack("h*"), qui retourne quelque chose comme "4b56da546d807eb0870170b4e03d77dd", qui semble être correcte. Cependant, quand je spécifie cela comme IV, la vidéo ne peut pas être jouée.

J'ai isolé le problème à IV, comme si je n'appelais pas random_iv et spécifiait le IV de "000000000000000000000000000000", cela fonctionne.

Répondre

0

D'accord, il semble que j'ai pu le faire fonctionner en utilisant aes_iv.unpack ("H *"). Je pense que je regardais des anciens fichiers vidéo d'essais antérieurs ratés. Je n'ai aucune idée de la raison pour laquelle H * fonctionne et h * ne fonctionne pas. Je vois qu'il ya une description de cela ici: http://apidock.com/ruby/String/unpack, ce qui explique la différence est faible grignoter vs grignoter élevé, mais pas sûr de savoir quelle est la différence ici.