Java-使用sun类验证PKCS7签名

Java-使用sun类验证PKCS7签名,java,security,encryption,digital-signature,pkcs#7,Java,Security,Encryption,Digital Signature,Pkcs#7,如何使用sun类验证PKCS7签名?我知道这样做是件坏事,但由于某些原因,我不能使用任何其他外部库的BouncyCastle 我可以使用以下代码从PKCS7获取内容: str = str.replace("-----BEGIN PKCS7-----\n", "").replace("-----END PKCS7-----", ""); PKCS7 pkcs7 = new PKCS7(Base64.decodeBase64(str.getBytes("UTF-8"))); byte[] b = n

如何使用
sun
类验证PKCS7签名?我知道这样做是件坏事,但由于某些原因,我不能使用任何其他外部库的BouncyCastle

我可以使用以下代码从PKCS7获取内容:

str = str.replace("-----BEGIN PKCS7-----\n", "").replace("-----END PKCS7-----", "");
PKCS7 pkcs7 = new PKCS7(Base64.decodeBase64(str.getBytes("UTF-8")));
byte[] b = new byte[pkcs7.getContentInfo().getContent().getData().available()];
pkcs7.getContentInfo().getContent().getData().getBytes(b);
String s = new String(b, "UTF-8");
return s.substring(s.indexOf("<")); //there are some strange symbols before <?xml
str=str.replace(----BEGIN-PKCS7----------\n),replace(----END-PKCS7-----------);
PKCS7 PKCS7=新的PKCS7(Base64.decodeBase64(str.getBytes(“UTF-8”));
字节[]b=新字节[pkcs7.getContentInfo().getContent().getData().available()];
pkcs7.getContentInfo().getContent().getData().getBytes(b);
字符串s=新字符串(b,“UTF-8”);

返回s.substring(s.indexOf(“您必须自己编写CMS和底层ASN.1 BER/DER库。Sun不包含任何官方API来处理PKCS#7(或后续RFC)指定的CMS消息)



JRE可能包含Java实现中有用的代码。请注意,这些类不是API的一部分,可能会随着Sun/Oracle Java的不同版本而变化。此外,它们可能根本不存在于Java的第三方实现中

import sun.security.util.*;
import sun.security.x509.AlgorithmId;
import sun.security.x509.X500Name;
import sun.security.x509.KeyUsageExtension;
import sun.security.x509.PKIXExtensions;
import sun.misc.HexDumpEncoder;
不应使用这些API。如果不更改运行时的访问条件(例如Eclipse),甚至不能使用这些API



请注意,Bouncy Castle库具有非常宽松的许可证;您甚至可以将源代码复制到应用程序中(只要您将初始语句保留在其中,请阅读许可证以了解更多详细信息)。如果你的雇主告诉你,你甚至不能使用它,那么组织中可能有严重的问题。

但是我在这里找到了创建签名PKCS7的工作代码:它只使用sun类。真的没有办法验证签名吗?我在查看了该代码后修改了我的答案。你当然可以锁定你的Java版本ion(通常对于代码来说是一个非常糟糕的主意,尤其是与安全相关的代码)或者使用Sun实现的GPL许可证。但在我看来,Bouncy比这两个选项都有优势。>JRE在Java实现中可能包含有用的代码是的,不幸的是,这些类我需要使用。你有使用这些类验证PKCS7签名的示例吗?即使我had,我只会用它们来展示如何不创建Java应用程序。我当然不会在公共论坛上发布使用这些类的代码。控制自己,告诉你的雇主,如果他不把实现决策像这样交给他的开发人员,他/她显然不能胜任架构师的工作强制解决方案。问题是,我们使用sun类来创建签名的PKCS7消息,而我们使用Bouncy Castle 1.40却无法做到这一点。Bouncy Castle 1.40可以用于验证签名,但我的团队负责人说,最好使用相同的类来签名和验证签名。如果这是我的决定,我将使用BC。如果我们同意的话有些代码因此而中断。Java版本在可预见的将来不会更新