gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:34:07 25 4
gpt4 key购买 nike

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

我在 google 中进行了搜索,阅读了 wiki 页面并阅读了有关 oracle s/mime 项目的信息。但这似乎不太可能。这些数据只能在 csr 中找到吗?

提前致谢

最佳答案

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

虽然 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其中 .getNotAfter() 直接给出过期日期时间。电子邮件地址(如果存在)(通常 X.509 证书不需要,但在用于 S/MIME 的证书中应该始终如此)通常是主题名称中的一个属性,它实际上具有以下内部结构: Java 不允许您直接访问,因此您需要:

String x500name = ((X509Certificate)cert).getSubjectX500Principal()) .toString();
// simple case: no multivalue RDN, no reserved chars ,+="<>\;# or extra spaces
for( String attr : x500name.split(", ") )
if( attr.startsWith("EMAILADDRESS=") )
... use attr.substring(13) ...
// other cases require slightly more complicated parsing

请注意,X.509 中根本没有加密,因此没有实际的解密,尽管许多人使用“解密”来描述任何不熟悉的东西,而不是实际的密码。

关于java - 有没有办法解密S/MIME公钥数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58465375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com