PHP创建签名

时间:2016-05-18 04:56:54

标签: php security cryptography

我在想一种创建数字签名的方法。我需要这个,因为一些文件需要由授权用户签署,就像授权用户一样,并且接收用户必须看到它来自授权,并且如果发生争议,发布的用户必须验证它是他的文件。

为此我试图在图像中上传带有实际签名的图像。

问题:我可以从签名图片中获取唯一值吗?

我正在考虑从图像中获取唯一值,然后使用签名图像中加密形式的唯一值作为私钥给openssl_sign

通过这种方式,发布用户可以签名并验证它是他的文件。但接收用户需要一个密钥才能打开文件。

问题:我可以向用户提供密钥(只有接收用户可用的密钥)才能打开该加密文件吗?

我已经搜索过但很难找到这些东西。请解释一下这些事情,如果我的逻辑错误,请更好地了解。

由于

2 个答案:

答案 0 :(得分:5)

首先,digital signature is a specific cryptography term。这是一种公钥加密方式,您可以使用私钥对邮件进行签名,任何人都可以使用您的公钥验证签名。

数字签名不是:

  • 加密哈希函数,例如MD5(虽然它们在内部使用哈希函数)
  • 数字相当于传统的纸笔签名

如果出于法律原因需要相当于纸笔签名的“数字”,请咨询律师。在一个法律问题上投掷密码术几乎是一个很好的举动,特别是因为大多数法律专业人士甚至不知道RSA代表什么,更不用说它是如何运作的。

如果事实证明您只需要加密数字签名grab libsodium and use crypto_sign_detached()。 PHP为您提供的内容更加安全(openssl_sign()是RSA + SHA1)。

答案 1 :(得分:2)

我不确定你究竟在问什么,但这里有一些意见/建议:

  1. "digital signature"是一回事。手写签名的图像完全不同。

  2. 如果您愿意,可以将图像与数字签名相关联。这将涉及创建证书。这是一个很好的讨论:

  3. How to add digital signature (RSA, Certificate, etc) to any of file, using PHP?

    1. 您还可以使用"non-repudiation"证书 - 以保证上传图片的人实际上是制作图片的人。