Rsa

Java 和 OpenSSL 之間的簽名/驗證

  • November 20, 2015

我正在嘗試在 C 應用程序和 Java 應用程序之間簽名/驗證數據。

現在在 java 中,我使用內置 JCE 提供程序和SHA256withRSAas 算法。在 C 部分,我使用 OpenSSL RSA_sign/ as 類型的RSA_verify方法。NID_sha256

使用此配置,我無法在從 C 簽名的 java 應用程序數據中驗證,反之亦然。似乎SHA256withRSA正在使用 PKCS#1 v1.5 和 openssl 聲明他們使用 PKCS# 2.0 作為填充(source)。

這就是為什麼我認為問題可能來自這種填充差異,但我找不到任何支持 v2.0 填充的 JCE 提供程序。

這個對嗎?這些填充物有什麼區別?

你的問題不在於簽名方案,還有其他問題。

RSA 由 RSA 加密標準 PKCS#1(反映在各種 RFC 中)指定。PKCS#1 v1.5 填充是在 1.5 版中引入的,但在 2.0、2.1 和 2.2 中仍然存在。然而,這些確實引入了一種更安全的填充方案,稱為 PSS。

不幸的是,沒有人用他們的真名來稱呼簽名生成方案:RSASSA-PKCS1-v1_5。您的 C 程式碼和 Java 程式碼似乎都使用該簽名方案。

引用自:https://crypto.stackexchange.com/questions/30682