如何数字签名(RSA,证书等)添加到任何文件,使用PHP?(How to add digital s

2019-06-24 03:01发布

我需要知道,如果任何类型的文件可以使用数字RSA,证书,这些东西,或者如果只有某些类型的文件进行签名签署。 所有这一切,使用PHP。

在例如:能否在纯文本文件进行签名的数字?,什么图像(PNG,JPEG,BMP)?

我并不需要用一个图形签名“附加”的图像。

谢谢您的帮助。

Answer 1:

使用phpseclib,纯PHP RSA执行 (更新这里 ):

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
extract($rsa->createKey());

$plaintext = 'terrafrost';

$rsa->loadKey($privatekey);
$signature = $rsa->sign($plaintext);

$rsa->loadKey($publickey);
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
?>

模拟到与CLI OpenSSL是如下:

openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -out signature.txt -sign privatekey.txt plaintext.txt 
openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -prverify privatekey.txt -signature signature.txt plaintext.txt 


Answer 2:

回复:可以将任何类型的文件进行数字签名,使用RSA,证书,这些东西,或者如果只有某些类型的文件进行签名?

答:是的,没有。 在一方面,标准的数字签名可以计算出位的任何软件包,其中包括一个纯文本文件,图像文件,二进制文件,任何你能想象。

但随后的问题变成:

  1. 你如何数字签名(这本身就是位的二进制运行)与数据文件相关联? 是否数据文件格式允许附加数字签名的数据? 或者你需要管理自己的数字签名,或许作为一个单独的文件,可能使用自己发明的数据格式?

  2. 一旦您的数字签名的数据及其签名,如何收件人核实数据及其签名,以确保谁签名的数据(标识)的收件人和数据没有被改变,因为它签署(完整性)?

文件格式支持数字签名

那本质上支持数字签名的文件格式的一大优势是,收件人可以通过接收签名的文件,然后使用自己的验证软件只需验证数字签名和文件的完整性。 收件人并不需要安装来自发件人什么。

有迹象表明,支持数字签名能够多文件格式。 例如,PDF,Word中.DOC,.DOCX。 Excel的.xls的,.XLSX。 有一个用于签名XML文件标准 。 其好处是,XML可以用作用于任何类型的数据的包络。 例如,一个PDF文件进行数字签名并将其发送到别人。 然后,收件人可以使用标准的/免费的Adobe Reader打开PDF并验证其数字签名(S)。

“格式”的纯文本文件(文件填充字符)不支持数字签名。 所以,你需要的文本和数字签名或与单独的数字签名处理的信封。 在任何情况下,收件人需要软件来验证数据。 (或者需要你提供纯文本和签名的规范后,写他自己。)

S / MIME提供的数字签名文本或其他电子邮件/ MIME组织的数据的标准方法。 请参见RFC 5751 。 但它没有被广泛使用超越电子邮件代理,可以产生或接收/验证签名的电子邮件。 展望不支持这一点。



Answer 3:

你为什么要进行数字签名,这些不同的文件吗?

没有为真正改变文本文件或图像以使这些文件本身包含某种形式的数字签名的没有标准。

如果你想确保文件没有被篡改过的用户,你可以给他们的文件的MD5哈希值。 他们可以使用免费工具来检查他们下载的文件的MD5哈希值,并将它与你给以确保他们的文件没有改变的一个。 这通常被用于该第三方可以插入恶意代码插入软件/二进制软件包。

另一种可能性是,你希望用户能够验证某些文件的真实性。 在这种情况下,用户可能希望确定了一个文本文件或图像来自于你特别。 这个功能几乎就像得到一个文件的MD5哈希值与只认识你,让最终用户可以将文件签名比较,以你的公共密钥,以确保没有被篡改的文件,并从一个特定的源来的私钥。 PGP(良好隐私)为此提供了一个框架。

我建议你检查出的PGP文件,介绍了这方面的详细信息。 http://www.pgpi.org/doc/pgpintro/



文章来源: How to add digital signature (RSA, Certificate, etc) to any of file, using PHP?