gpt4 book ai didi

java - 如何获取 mime 类型的 p7s 文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:16 25 4
gpt4 key购买 nike

获取文件 mime 类型的一种可能方法如下:

File myFile = File("myDocument.pdf");
Path path = file.toPath();
String mimeType = Files.probeContentType(path);

它返回application/pdf。一切都是正确的。但这种方式不适用于 *.p7s 文件。它返回 null 而不是预期的 application/pkcs7-mime

也许有人知道问题出在哪里以及解决方案是什么?

最佳答案

Java 的 FileTypeDetector 不支持开箱即用的 p7s 文件格式检测。因此,除非某些文件类型检测库确实支持 p7s 格式,否则您几乎只能靠自己了。

p7s 扩展名由 SMIME 标准定义为用于 RFC 2315 中 PKCS-7 加密签名的文件扩展名.它的 mime 内容类型实际上是 application/pkcs7-signature。不知道如何处理这些签名的电子邮件客户端允许用户将它们作为文件下载。

使用 ASN.1 描述了 PKCS-7 语法在 RFC 2315 . PKCS-7 签名使用 DER 编码.一旦理解了这一点,验证 p7s 文件是否实际上是 pkcs7-signature 类型实际上并不难。

为了验证 p7s 文件是否为 pk7s 签名,您可以使用适用于 Java 的 ASN.1 解析器,例如 apache harmony解析文件。然后您只需断言 ASN.1 序列开头的对象标识符属于 pkcs7-signedData 类型(有关此对象标识符的定义,请参阅 RFC 2315 的第 14 章).这种检测方法并不能证明p7s文件确实是PKCS-7签名,但可能性极高。

OpenSSL 有一个内置的 ASN1 解析器。您可以使用它手动应用上述检测方法:

$ openssl asn1parse -inform DER -in smime.p7s -dump -i
0:d=0 hl=4 l= 490 cons: SEQUENCE
4:d=1 hl=2 l= 9 prim: OBJECT :pkcs7-signedData
^^^^^^^^^^^^^^^^
that's what I am talking about

希望这对您有所帮助。祝你好运!

关于java - 如何获取 mime 类型的 p7s 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21056781/

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