p7s文件的内容

时间:2014-04-11 19:59:11

标签: digital-signature

有没有人知道p7s文件的内容?

文件中至少有一个数字签名,我可以很容易地找到它,但我想抓住包含用私钥加密的部分的文件部分 - 即,不可否认部分数字签名。

有谁知道可以在哪里找到一般文件格式的简单副本?

编辑补充:

我正在处理的文件的一般格式是:

字节偏移记录类型

_______ _______

0 x509证书(或者程序说的那样)

0版

1 8x(信息类型)

3 1偏移到下一个信息(文件长度 - 4)

52 x509 cert(嵌入式,收集成员: ROOT CA

56 x509 cert(嵌入式,收集成员: ROOT CA

(1个偏移)x509证书(新的,主题标识符:电子邮件

(1偏移+4)x509证书(嵌入式,收集memeber:电子邮件

(变化)x509证书(新增密钥用法:数字签名,不可否认

(变化+4)x509证书(嵌入式,收集成员:数字签名,不可否认))

(变化)x509证书(新的,证书颁发机构信息: CA EMAIL

(变化+4)x509证书(嵌入式,收集成员: CA EMAIL

(变化)交叉证明对信息,未知类类型

(变化)未知类类型的证书(如果需要,用尾随零填充)

我知道这个文件不包含消息摘要,并且不是唯一的,除非它是证书持有者的原始文件(即,不同的证书会产生不同的结果,但不同的消息都附有相同的p7s文件它们)。

我认为当文件被发送到不支持电子邮件加密/解密的系统(例如gmail或yahoo)时,会从文件中删除邮件摘要。这将是我对p7s文件缺乏明确内容的解释。

除了从中删除消息摘要的可能性之外,文件不会被损坏。他们不会打开ASN。将使用ASN(cer文件)打开常规证书文件。

4 个答案:

答案 0 :(得分:3)

P7S文件通常包含SignedData类型的DER编码CMS(加密消息语法)结构,该结构在RFC5652中定义。您可以使用ASN.1 Editor方便地检查文件的确切结构和内容。

答案 1 :(得分:0)

我编写了一个程序,基本上用暴力分析文件。

我逐字节检查文件,并在try-catch循环中将字节复制到X509Certificate2类实例化的输入中。

无论是否中止,我移动一个字节并再次检查。

如果检查成功,我将生成的证书添加到集合中。

最后,我检查集合中的证书,并将文件偏移量的十六进制和格式化的ascii转储到报告文件中。

我所指的p7s文件与原始文件分离,显然不包含任何签名信息。当签名被发送到无法加密/解密信息的电子邮件地址时,这显然会被剥夺。

答案 2 :(得分:0)

请参阅以上补充内容。

答案 3 :(得分:0)

我最近需要获取一些文件的内容" .rtf.p7s"。看看他们的内容,使用记事本++,我可以看到RTF在固定数量的字节后没有加密。所以我创建了这个小脚本,删除了包含我不需要的密钥信息的第一个字节。

Ps - 在sublime中打开文件没有帮助。它将文件打开为二进制文件。

    <?php
    $dir = __dir__;
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh))) {
        if( strpos( $filename, ".p7s" ) !== false ) {
            $files[] = $filename;
        }
    }

    foreach($files as $file ){
        $content = file_get_contents( $file );
        $newcontent = substr( $content, 62 );
        $newfilename = substr( $file , 0, -4 );
        file_put_contents($newfilename, $newcontent);
    }
    ?>