在 JCE 中动态检测签名算法
Dynamically detect signature algorithms in JCE
我的应用程序在 Java 7. 我想对调用系统发送的签名消息进行数字验证。
我的问题是,我不知道调用系统中使用的签名算法。
在JCE运行时,如何检测签名算法来验证?
我看到的所有示例的算法都是预先知道的或硬编码的
https://www.mkyong.com/java/java-digital-signatures-example/
https://docs.oracle.com/javase/tutorial/security/apisign/index.html
我正在使用 Sun 提供的 JCE 实现,不能使用任何第三方提供商,如 Bouncy Castle。
我可以进行 ASN 解析来检测算法的 OID,但是 AFAIK JCE 也没有任何方法通过在 java 中传递 OID 来检测算法 7.
请在此处查看 Fetching MessageDigest by OID is failing in Java 7
您可以从已签名的消息中提取算法 OID,但这通常不是解决您问题的正确方法,因为您必须处理所有的可能性并且代码会太复杂
填充算法:PSS、PKCS#1等
密钥算法:RSA、EC、DSA
哈希算法:SHA1、SHA256等
在通常的签名格式中:XMLDsig
、CMS
、PAdES
、JWS
签名算法作为属性包含在签名容器中
所以,我建议在调用系统发送的消息中包含签名算法。例如在 JWS 签名中包含一个 header 像这样 {"alg":"RS256"}
当然,如果您使用一组有限的密钥和算法(即 RSA-PKCS#1 with SHA),您可以从签名中提取 OID,解密消息并解析 ASN.1
我的应用程序在 Java 7. 我想对调用系统发送的签名消息进行数字验证。
我的问题是,我不知道调用系统中使用的签名算法。
在JCE运行时,如何检测签名算法来验证?
我看到的所有示例的算法都是预先知道的或硬编码的
https://www.mkyong.com/java/java-digital-signatures-example/
https://docs.oracle.com/javase/tutorial/security/apisign/index.html
我正在使用 Sun 提供的 JCE 实现,不能使用任何第三方提供商,如 Bouncy Castle。
我可以进行 ASN 解析来检测算法的 OID,但是 AFAIK JCE 也没有任何方法通过在 java 中传递 OID 来检测算法 7.
请在此处查看 Fetching MessageDigest by OID is failing in Java 7
您可以从已签名的消息中提取算法 OID,但这通常不是解决您问题的正确方法,因为您必须处理所有的可能性并且代码会太复杂
填充算法:PSS、PKCS#1等
密钥算法:RSA、EC、DSA
哈希算法:SHA1、SHA256等
在通常的签名格式中:XMLDsig
、CMS
、PAdES
、JWS
签名算法作为属性包含在签名容器中
所以,我建议在调用系统发送的消息中包含签名算法。例如在 JWS 签名中包含一个 header 像这样 {"alg":"RS256"}
当然,如果您使用一组有限的密钥和算法(即 RSA-PKCS#1 with SHA),您可以从签名中提取 OID,解密消息并解析 ASN.1