如何在验证之前将十六进制签名转换为二进制签名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在验证之前将十六进制签名转换为二进制签名相关的知识,希望对你有一定的参考价值。

我需要十六进制形式的签名数据,所以我使用:

openssl dgst -sha256 -hex -sign ./id_rsa my.data > my.signature

openssl文档指出:

无法使用openssl验证十六进制签名。而是使用“xxd -r”或类似程序在验证之前将十六进制签名转换为二进制签名。 Source

但是,当我尝试这样做时......

echo "$(cat my.signature)" | xxd -r -p > binary.signature

......我一无所获

谁能看到我做错了什么?

答案

Dan,十六进制签名文件不是普通的十六进制字符串。它以xxd易于解析的非十六进制前缀开头。像RSA-SHA256(my.data)=之类的东西。您需要在验证前将其删除。

cat my.signature | sed -e 's/.*= ([^ ]+)$/1/' | xxd -r -p > binary.signature

一个小小的提示。如果您使用ssh-keygen创建文件id_rsa,那么相应的id_rsa.pub不适合openssl,它是ssh格式。您需要以PEM格式生成公钥。

openssl rsa -in id_rsa -pubout > id_rsa.pub.pem

这是验证的正确格式。

openssl dgst -verify id_rsa.pub.pem -signature binary.signature my.data
-> Verified OK

以上是关于如何在验证之前将十六进制签名转换为二进制签名的主要内容,如果未能解决你的问题,请参考以下文章

sing 签名验证用于表单数据安全效验

如何简化这种二进制到java类型的代码?

哈希值

带有无效签名的无效二进制文件

向 App Store 提交二进制文件 - 无效的代码签名权利

如何对使用 py2exe 生成的二进制文件进行数字签名?