Rsa
Java 和 OpenSSL 之間的簽名/驗證
我正在嘗試在 C 應用程序和 Java 應用程序之間簽名/驗證數據。
現在在 java 中,我使用內置 JCE 提供程序和
SHA256withRSA
as 算法。在 C 部分,我使用 OpenSSLRSA_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 程式碼似乎都使用該簽名方案。