Dav*_*vid 8 php rsa file digital-signature
我需要知道是否可以使用RSA,证书和那些东西进行数字签名,或者是否只能签署某种文件.所有这些,使用PHP.
例如:纯文本文件可以用数字签名吗?图像怎么样(png,jpeg,bmp)?
我不需要"附加"带有图形签名的图像.
谢谢您的帮助.
Lar*_*y K 12
Re:任何类型的文件都可以使用RSA,证书和那些东西进行数字签名,或者只签署某种文件?
答:是的,不是.一方面,可以为任何比特束计算标准数字签名,包括纯文本文件,图像文件,二进制文件,您可以想象的任何东西.
但问题变成了:
如何将数字签名(本身是二进制位运行)与数据文件相关联?数据文件格式是否允许将数字签名附加到数据中?或者您是否需要自己管理数字签名,可能作为单独的文件,也许使用您自己发明的数据格式?
获得数字签名数据及其签名后,收件人如何验证数据及其签名,以确保收件人谁签署了数据(身份),并且数据自签名后是否已更改(完整性)?
支持数字签名的文件格式
本质上支持数字签名的文件格式的最大优点是,收件人只需接收签名文件然后使用自己的验证软件即可验证数字签名和文件的完整性.收件人无需安装发件人的任何内容.
有许多支持数字签名的功能文件格式.例如,pdf,Word .doc,.docx.Excel .xls,.xlsx.签名xml文件有一个标准.它的好处是xml可以用作任何类型数据的包络.例如,pdf文件可以进行数字签名并发送给某人.然后,收件人可以使用标准/免费的Adobe Reader打开pdf并验证其数字签名.
纯文本文件(填充有字符的文件)的"格式"不支持数字签名.因此,您需要一个文本及其数字签名的信封或单独处理数字签名.在任何情况下,收件人都需要您的软件来验证数据.(或者在提供纯文本和签名的规范之后需要编写自己的.)
S/MIME提供了对文本或其他电子邮件/ mime组织数据进行数字签名的标准方法.见rfc 5751.但除了可以生成或接收/验证签名电子邮件的电子邮件代理之外,它没有被广泛使用.Outlook确实支持这一点.
使用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';
?>
Run Code Online (Sandbox Code Playgroud)
与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
Run Code Online (Sandbox Code Playgroud)