有没有办法解密S / MIME公钥数据?

问题描述 投票:0回答:2

我想根据其公钥获取S / MIME证书的电子邮件地址和到期日期。这种办法甚至可能吗?还是我完全错了?我可以解密公共密钥以通过Java获得此类数据吗?

我在google中搜索,阅读了wiki页面,并阅读了有关oracle s / mime项目的信息。但是它并没有像它可能的那样接缝。这些数据仅在csr中可用吗?

提前感谢

java encryption public-key smime
2个回答
0
投票
    File file = new File(fileName);
    FileReader fileReader = new FileReader(file);
    PEMParser pemParser = new PEMParser(fileReader);
    X509CertificateHolder caCertificate = (X509CertificateHolder) pemParser.readObject();

0
投票

我很惊讶这不是一个骗子,但我找不到一个好的。

尽管Bouncy很好,并且如果要使用它也具有许多功能,但是Java核心可以永远处理X.509证书。对于以[[任一 PEM或DER格式(尽管javadoc尚不清楚)的文件(或可以作为流访问的任何文件)中的证书,您需要的是CertificateFactory

CertificateFactory fact = CertificateFactory.getInstance("X.509"); // from a real file InputStream is = new FileInputStream ("filename"); Certificate cert = fact.generateCertificate(is); is.close(); // or use try-resources to do automatically // from an alternate/custom filesystem, such as a ZIP Path p = Paths.get("somespecification"); // or any other creation of a Path InputStream is = Files.newInputStream(p); // add open options if needed // same as before // from the classpath (usually a JAR) InputStream is = ClassLoader /*or any Class<?> object*/ .getResourceAsStream("name"); // same as before // from a byte[] in memory InputStream is = new ByteArrayInputStream (bytearray); // same as before, except don't really need to close // you get the idea
尽管像这样的JCA API被定义为允许很多扩展,但是读取X.509证书实际上不仅会给您Certificate,而且会给您X509Certificate的子类,X509Certificate从中直接给出到期日期时间。电子邮件地址(如果存在)(通常不是X.509证书所必需的,但在用于S / MIME的证书中应始终如此)通常是主题名称中的一个属性,该名称实际上具有内部结构Java不允许您直接接触,因此您需要:

.getNotAfter()

请注意,尽管许多人使用'decrypt'来描述不熟悉的非实际密码,但X.509中根本没有加密,因此也没有实际的解密。
© www.soinside.com 2019 - 2024. All rights reserved.