我需要知道是否可以使用RSA、证书之类的东西对任何类型的文件进行数字签名,或者是否只能对某些类型的文件进行签名。所有这些都是使用PHP实现的。
例如:一个纯文本文件可以用数字签名吗?图像(png,jpeg,bmp)怎么样?
我不需要“附加”带有图形签名的图像。
谢谢你的帮助。
发布于 2012-05-04 01:57:08
使用phpseclib, a pure PHP RSA implementation (更新的here):
<?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
发布于 2012-05-02 13:08:43
为什么要对这些不同的文件进行数字签名?
对于实际更改文本文件或图像以使文件本身包含某种类型的数字签名,并没有标准。
如果您想向用户保证文件没有被篡改,您可以向他们提供文件的MD5散列。他们可以使用免费的工具来检查他们下载的文件的MD5散列,并将其与您提供的文件进行比较,以确保他们的文件没有被更改。这通常用于第三方可能向其中插入恶意代码的软件/二进制包。
另一种可能性是,您希望用户能够验证某些文件的真实性。在这种情况下,用户可能希望确定某个文本文件或图像特定来自您。这几乎就像是使用只有您知道的私钥获取文件的MD5散列,以便最终用户可以将文件签名与您的公钥进行比较,以确保文件未被篡改且来自特定来源。PGP (相当好的隐私)为此提供了一个框架。
我建议您查看PGP简介文档,了解有关这方面的更多信息。http://www.pgpi.org/doc/pgpintro/
https://stackoverflow.com/questions/10407523
复制相似问题