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

标签 hex sha256 xxd

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

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

openssl 文档指出:

Hex signatures cannot be verified using openssl. Instead, use "xxd -r" or similar program to transform the hex signature into a binary signature prior to verification. 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

关于hex - 如何在验证之前将十六进制签名转换为二进制签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47935981/

相关文章:

linux - 在 Linux 上的多个图像中搜索特定的给定十六进制字符串

c++ - 将 "xxd -i"编码的C源代码转换为C源代码的脚本/工具?

vb6 - vb 十六进制颜色代码

javascript - 快速、轻量级 JavaScript SHA-256 安全哈希实现

c# - 计算二进制文件中字节模式的出现次数

c# - C# 中字符串的 SHA256 哈希值与网站上的哈希值不一致

node.js - nodejs中大文件的校验和

bash - 如何使用 xxd 逐行制作 hexdump?

c - 如何使用位移位/掩码将二进制转换为十六进制

c++ - 将 0A 替换为\n