如何用OpenSSL解密Node.js生成的AES-256-CBC加密字符串?
使用OpenSSL解密Node.js AES-256-CBC加密的字符串
没问题,我来帮你拆解怎么用OpenSSL解密这段Node.js代码生成的加密串。首先先理清楚你代码里的几个关键参数,这样才能对应上OpenSSL的命令:
- 加密算法:
AES-256-CBC - IV值:
0f9387b3f94bf06f(16字节的十六进制字符串,符合CBC模式的IV长度要求) - 密钥:
ZTk0YTU5YjNhMjk4NGI3NmIxNWExNzdi(Base64编码的32字节密钥,AES-256恰好需要32字节密钥,解码后刚好匹配) - 加密输出格式:十六进制(Hex)
对应的OpenSSL解密命令
你可以直接用以下命令解密,记得把<encrypted-hex-string>替换为实际生成的加密字符串:
echo -n "<encrypted-hex-string>" | xxd -r -p | openssl enc -d -aes-256-cbc -iv 0f9387b3f94bf06f -K $(echo -n "ZTk0YTU5YjNhMjk4NGI3NmIxNWExNzdi" | base64 -d | xxd -p | tr -d '\n')
命令各部分解释
我逐个拆解命令里的关键环节,方便你理解背后的逻辑:
echo -n "<encrypted-hex-string>" | xxd -r -p:把十六进制格式的加密串转换成二进制数据(OpenSSL默认处理二进制输入,而你的Node.js代码输出的是Hex文本)openssl enc -d -aes-256-cbc:指定使用AES-256-CBC算法执行解密操作(-d代表解密模式)-iv 0f9387b3f94bf06f:直接传入十六进制格式的IV值,OpenSSL会自动解析为二进制IV-K $(echo -n "ZTk0YTU5YjNhMjk4NGI3NmIxNWExNzdi" | base64 -d | xxd -p | tr -d '\n'):将Base64编码的密钥先解码为原始二进制,再转成十六进制字符串,传给OpenSSL的-K参数(-K要求密钥以十六进制格式传入)
实际操作示例
假设你的Node.js代码加密"test message"后得到的Hex字符串是a1b2c3d4e5f6...,那么解密命令就是:
echo -n "a1b2c3d4e5f6..." | xxd -r -p | openssl enc -d -aes-256-cbc -iv 0f9387b3f94bf06f -K $(echo -n "ZTk0YTU5YjNhMjk4NGI3NmIxNWExNzdi" | base64 -d | xxd -p | tr -d '\n')
执行后就会输出明文test message。
内容的提问来源于stack exchange,提问作者croweman
相关产品推荐
相关产品推荐

