我需要十六进制形式的签名数据,所以我使用:
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/