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:
- Comment puis-je être sûr que random_iv est la fixation d'un bon IV qui est compatible avec la spécification HLS?
- 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.