【发布时间】:2009-10-08 04:30:46
【问题描述】:
我正在尝试验证通过使用 SHA-1 散列并使用 RSA 私钥加密散列来签名的文件。
显然我正在使用 RSA 公钥进行验证。密钥为 DER 格式。
签名验证使用 Java 的 Signature 类可以正常工作。
我正在尝试的 openssl 命令(和结果)是:
~/Downloads/openssl-1.0.0-beta3/apps/openssl pkeyutl -in encryptedZip.bin
-keyform DER -verify -sigfile savedDigitalSignature.txt -pubin -inkey public.der
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
Signature Verification Failure
我在 openssl 配置文件中看不到任何适用的内容,因此我认为该警告并不重要。
savedDigitalSignature.txt 文件包含签名字节。
我的理论是,openssl 正在寻找某种特定文件格式的数字签名,但我在文档中没有找到任何说明应该是什么的内容。
想法?
【问题讨论】:
-
您的声明“...是通过使用 SHA-1 散列签名并使用 RSA 加密散列...”听起来很可疑,因为加密和签名不是同一个操作。但是由于您的 java 库接受签名我想知道您使用的是哪个 java 库?
-
我向那些回答的人道歉(并感谢)。我正在做的是使用 Java Signature 类进行签名。我以为它是通过对数据进行哈希处理,然后对哈希进行加密来做到这一点的,但现在我发现这个假设是不正确的。
-
@Accipitridae:数字签名是用私钥加密的消息摘要。加密与签名不同,但它是其中的一部分。
标签: encryption openssl rsa digital-signature