【问题标题】:Verify data with public RSA 1024 Openssl key with openssl_verify()?使用 openssl_verify() 使用公共 RSA 1024 Openssl 密钥验证数据?
【发布时间】:2011-01-11 12:03:13
【问题描述】:

我得到了 private_key.pem 和 public_key.pem。公版由银行签字。 为了尝试验证银行发送给我的数据,我使用 php 方法 openssl_verify()

到目前为止,我无法根据他们的公钥验证该数据。 我总是遇到这两个错误:

错误:0407006A:rsa 例程:RSA_padding_check_PKCS1_type_1:块 类型不是 01

错误:04067072:rsa 例程:RSA_EAY_PUBLIC_DECRYPT:填充 检查失败

我也尝试过使用 shell_exec() 方法验证它,但我得到了同样的错误。

任何人都看过这个并且可能知道如何正确验证它?

【问题讨论】:

  • 看起来银行使用了不符合 PKCS#1 的填充。尝试使用 openssl_decrypt() 来查看签名中的加密内容,也许他们只是签署了一个哈希,没有 PKCS#1 填充
  • @Nickolay O 我不太确定我应该为 openssl_decrypt() 使用哪种方法。我有 97 种方法可用。

标签: php openssl


【解决方案1】:

它可能正在使用 OAEP 填充。它符合 PKCS#1(在 PKCS#1 v2.0+ 中定义的 OAEP),但它确实不同于定义的唯一填充方案 PKCS#1 v1.5。

无论如何,我的建议是尝试使用phpseclib, a pure PHP RSA implementation 对其进行解密。该软件包的维护者——与 OpenSSL PHP 扩展的维护者不同——积极支持他的产品。

【讨论】:

  • 感谢伟大的 phpseclib 链接。使用该类来尝试验证并返回未经验证的结果。完全卡在这里不知道为什么它失败了。另外我该如何调试?
  • @arma:哇。你在玩的时候有没有抓到一些现金?!
  • @SedateAlien 哈哈,那是很久以前的事了 :) 我不知道我在说什么 :D
猜你喜欢
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2020-02-28
  • 2011-03-08
相关资源
最近更新 更多