如何将Base64字符串转为32字节Hex以适配OpenSSL AES-256加解密?
把Base64字符串转成32字节Hex格式(用于OpenSSL AES-256加解密)
步骤1:解码Base64到二进制文件
先定义目标Base64字符串,解码后保存为二进制文件:
local base64_str="OQbb8rXnj/DwvglW018uP/1tqldwiJMbjxBhX7ZqwTw=" echo "${base64_str}" | base64 --decode > foo.txt
用wc -c < foo.txt可以确认,这个二进制文件的大小是32字节,符合AES-256密钥/IV的长度要求。
步骤2:二进制转Hex格式
使用xxd工具的-p参数(输出纯Hex,不带偏移量和换行),把二进制文件转成Hex字符串:
xxd -p ./foo.txt > ./foo.hex.txt
注意:原命令
xxd -p ./foo.txt ./foo.hex.txt写法错误,xxd不支持直接指定输出文件作为参数,需通过重定向>输出到目标文件。
生成的foo.hex.txt里的Hex值是:
3906dbf2b5e78ff0f0be0956d35f2e3ffd6daa577088931b8f10615fb66ac13c
此时用wc -c < foo.hex.txt会显示64字节,刚好对应32字节二进制的Hex编码(每个二进制字节对应2个Hex字符),原操作中得到66字节是因为Hex字符串里包含了换行符,而xxd -p会自动去除多余换行,生成适合OpenSSL使用的连续Hex字符串。
步骤3:封装成复用函数
为了避免生成中间文件,直接把Base64转成Hex,可以封装一个base64_to_hex函数:
base64_to_hex() { echo -n "$1" | base64 --decode | xxd -p }
之后就能直接在OpenSSL命令中调用这个函数,获取Hex格式的密钥和IV,执行AES-256-CTR加解密:
local iv_hex=$(base64_to_hex "${iv}") local key_hex=$(base64_to_hex "${key}") openssl enc -aes-256-ctr -K "${key_hex}" -iv "${iv_hex}" -in "${input_file}" -out "${output_file}"
内容的提问来源于stack exchange,提问作者vamsiampolu
相关产品推荐
相关产品推荐

