如何用OpenSSL使用文件中的密钥生成HMAC-SHA256哈希?
解决方案:使用文件中的密钥生成HMAC-SHA256哈希
你之前的问题核心在于:-hmac 参数需要直接接收密钥内容,而不是密钥文件名——你之前的写法都是把字符串(不管是test_key.key还是路径)直接传给了-hmac,所以OpenSSL自然把它当作密钥本身了。
这里给你两个可靠的单行命令方案:
方案1:用命令替换读取密钥文件内容
这种方法通过shell的命令替换把密钥文件内容直接传入-hmac参数:
openssl dgst -sha256 -hmac "$(cat test_key.key)" mytext.txt
- 用双引号包裹
$(cat test_key.key)是为了避免shell解析密钥中的特殊字符(比如空格、引号、反斜杠),如果你的密钥是纯二进制或包含特殊字符,这个引号必不可少。 - 注意:如果密钥文件末尾有多余换行符,
cat会把它也读进去;如果确认密钥文件只有32字节无多余换行,直接用上面的命令即可;如果有多余换行,可以用tr -d '\n'去除:openssl dgst -sha256 -hmac "$(cat test_key.key | tr -d '\n')" mytext.txt
方案2:使用OpenSSL原生的密钥文件参数(更健壮)
OpenSSL支持通过-macopt keyfile:选项直接指定密钥文件,不用shell处理内容,这是更安全的方式,尤其适合二进制密钥或含特殊字符的密钥:
openssl dgst -sha256 -mac HMAC -macopt keyfile:test_key.key mytext.txt
- 这里显式指定
-mac HMAC(-hmac其实是-mac HMAC的简写,但结合-macopt时需要明确指定MAC算法),然后用keyfile:直接指向你的密钥文件,OpenSSL会直接读取文件中的32字节作为密钥,不会引入额外的换行或解析问题。
这两个方案都能解决你的问题,推荐优先用方案2,它对各种密钥格式的兼容性更好。
内容的提问来源于stack exchange,提问作者DaveMac001
相关产品推荐
相关产品推荐

