dgst sha256 sign概要
openssl dgst -sha256 -sign priv_2048.pem -out Script_sig.bin Wait_sign.bin
功能介绍:使用SHA-256哈希算法为文件生成数字SHA值并做RSA数字签名
整体架构流程
openssl dgst -sha256 -sign priv_2048.pem -out Script_sig.bin Wait_sign.bin
1.
openssl dgst命令会先计算输入文件的SHA-256哈希值。等同于命令行openssl dgst -sha256 Wait_sign.bin
2. 对
SHA-256哈希值进行PKC#1填充
3.
然后使用指定的私钥对PKC#1填充值进行加密,生成数字签名。
技术名词解释
openssl dgst:
是 OpenSSL 命令行工具中的一个子命令,用于计算给定数据的摘要(digest)。这里的“摘要”通常指的是数据的哈希值,它是对原始数据的一种固定长度的表示。通过使用哈希函数,可以生成一个简短的、唯一的标识符,该标识符表示了原始数据的内容。哈希函数具有许多重要的安全特性,比如确定性(相同的输入总是产生相同的输出)、雪崩效应(输入的小变化会导致输出的大变化)以及单向性(从哈希值难以逆向计算出原始数据)。
-sha256:sha256
选项,指定使用 SHA-256 算法来计算Wait_sign.bin
的哈希值。
-sign:sign
选项用于生成一个数字签名。这个选项告诉 OpenSSL 使用指定的私钥对数据的 SHA-256 哈希值进行加密,从而生成一个数字签名。
priv_2048.pem:
指定使用 private_key.pem
文件中的私钥来对哈希值进行加密,私钥的类型决定签名算法,本次测试使用的是RSA格式的私钥。
-out Script_sig.bin:
指定将生成的签名保存到Script_sig.bin
文件中。
Wait_sign.bin:
是要签名的数据。
Note:
在 OpenSSL 中,当你使用 openssl dgst -sha256 -sign
命令时,实际上签名算法的选择取决于你使用的私钥类型。如果你有一个 RSA 私钥,那么 OpenSSL 会默认使用 RSA 算法来生成签名。如果你有一个 ECDSA 私钥,那么会使用 ECDSA 算法。因此,签名的算法并不是由秘钥的格式直接决定的,而是由秘钥的类型决定的。
具体到你的命令:openssl dgst -sha256 -sign priv_2048.pem -out Script_sig.bin Wait_sign.bin
这里的 priv_2048.pem
文件应该包含一个私钥。OpenSSL 会读取这个文件并确定私钥的类型。如果priv_2048.pem
包含的是一个 RSA 私钥,那么 OpenSSL 就会使用 RSA 算法来生成签名。
你可以通过查看私钥文件的内容来确定私钥的类型。
小结
使用了C语言代码实现了和命令行openssl dgst -sha256 -sign一致的结果,不过受限于博主的时间,只探索了单次计算HSAH值的代码SHA256。后续博主可能考虑使用多次计算HASH值的代码。