如何使用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
但我需要先验证签名。当然我有证书可以做到这一点:
private X509Certificate certVerify;
。
谢谢!
答案 0 :(得分:2)
您必须自己编写CMS和底层ASN.1 BER / DER库。 Sun不包含任何官方API来处理PKCS#7(或后续RFC)指定的CMS消息。
JRE可能包含Java的实现中的有用代码。请注意,这些类是不 API的一部分,可能会更改Sun的不同版本的Sun / Oracle Java。此外,在Java的3个 rd 方实现中,它们可能不会出现 。
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的。它们甚至不能在不改变运行时的访问条件的情况下使用。蚀。
请注意,Bouncy Castle图书馆拥有非常许可证;您甚至可以将源代码复制到您的应用程序中(只要您将初始语句留在那里,阅读许可证以获取更多详细信息)。如果您的雇主告诉您即使不能使用,那么组织中也可能存在严重错误。