【问题标题】:Using openssl encryption for Apple's HTTP Live Streaming - problem对 Apple 的 HTTP Live Streaming 使用 openssl 加密 - 问题
【发布时间】:2010-12-29 21:48:33
【问题描述】:

static.key 包含我的随机密钥时,这是我的shell 脚本代码。

hexKey=$(cat static.key | hexdump -e '16/1 "%02x"')
echo $hexKey
hexIV="0"
echo $hexIV
openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K ${he-iv ${hexIV}

运行时出现一些错误。

(output:
non-hex digit
invalid hex iv value
: command not found
)

也许有人知道问题所在。我已经用了好几天了。

【问题讨论】:

    标签: encryption streaming openssl aes


    【解决方案1】:

    该错误意味着 OpenSSL 看到的 IV 值包含非十六进制字符(即 0123456789abcdefABCDEF 以外的字符)。

    AES128 密钥是 128/8 = 16 字节,因此您应该有 32 个字符作为密钥。 IV 为 16 个字节,对应于 AES 块大小,OpenSSL 将为您将单个“0”转换为 16 个零字节。这是一个很好的命令示例:

    $ echo -n "hello" > in
    $ openssl aes-128-cbc -e -in in -out out -p -nosalt \
      -K 000102030405060708090a0b0c0d0e0f -iv 000102030405060708090a0b0c0d0e0f
    $ cat out | hexdump -e '16/1 "%02x"'
    8326dc340c564d49790650a59260fea0
    

    现在用非十六进制字符替换 IV 的最后一个字符,看看你得到的错误与你得到的相同。

    $ openssl aes-128-cbc -e -in in -out out -p -nosalt \
      -K 000102030405060708090a0b0c0d0e0f -iv 000102030405060708090a0b0c0d0e0q
    $ cat out | hexdump -e '16/1 "%02x"'
    non-hex digit
    invalid hex iv value
    

    如果您粘贴的是您正在运行的真实代码,那么问题就很明显了。首先,-K ${he-iv ${hexIV} 应该是什么意思?其次,参数-K 是给出密钥。您缺少-iv 来进行静脉注射。你甚至缺少一个右括号。

    假设 static.key 有 16 个字节,这可能会解决您的问题:

    openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K $hexKey -iv $hexIV
    

    最后一个提示,如果您使用 bash,请使用 -x 作为 bash 的参数运行脚本,它会在扩展变量后打印它执行的每一行,以便您可以准确地看到它在做什么:

    $ /bin/bash -x my_script
    + hexKey=0
    + hexIV=0
    + openssl aes-128-cbc -e -in in -out out -p -nosalt -K 0 -iv 0
    

    【讨论】:

      【解决方案2】:

      在 bash shell 中存储键值的过程中,包含一些尾随垃圾(null 或换行符),这些垃圾被传递给 openssl 并导致它抱怨非十六进制字符。

      要为 128 位/32 ascii 字符十六进制键和 IV 解决此问题,请告诉 bash 仅传递前 32 个字符(对于其他键或 iv 长度,将值从 32 更改为 1/4 中的位数钥匙或iv)

      openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K ${hexKey:0:32} -iv ${hexIV:0:32}
      

      要验证是否传递了正确的值,请使用 openssl 的“打印键”-P 选项(注意大写“-P”)

      openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K ${hexKey:0:32} -iv ${hexIV:0:32} -P
      

      【讨论】:

        【解决方案3】:

        我一直在努力解决这个问题,基本上我找到了这个解决方案:

        加密:

        openssl aes-256-cbc -k “choose_password_to_encrypt” -in /path_to_your_file_to_encrypt/file_to_encrypt.extension_file -out /path_to_your_file_to_dencrypt/choose_name_file_after_decrypt.extension_file.enc -a
        

        解密:

        openssl aes-256-cbc -k “password_chose_to_encrypt” -in /path_to_your_file_to_dencrypt/choose_name_file_after_decrypt.extension_file.enc -d -a -out /path_to_your_file_to_encrypt/file_to_encrypt.extension_file
        

        希望对你有用

        【讨论】:

          猜你喜欢
          • 2011-03-01
          • 2011-10-06
          • 1970-01-01
          • 2013-12-25
          • 1970-01-01
          • 1970-01-01
          • 2015-02-22
          • 2012-01-01
          • 1970-01-01
          相关资源
          最近更新 更多