【问题标题】:confusion with the term openssl_private_encrypt与术语 openssl_private_encrypt 混淆
【发布时间】:2013-02-18 19:22:18
【问题描述】:

在加密中,我们使用接收者的公钥,为什么函数中的“私人”一词?对我来说似乎矛盾或困惑。

当我使用私钥时,我正在签署一些东西。看起来这个函数会给出与openssl_sign() 相同的结果,我尝试了两者并给出了不同的输出。

因为openssl_private_encrypt这个函数有“private”和“encrypt”,不知道是加密还是签名。这个函数有什么用?

【问题讨论】:

  • 争论 php 函数名称会让你得到nowhere
  • 对不起,第一段中提到的函数是 openssl_private_encrypt()
  • 在 SSL 中,sender's private 密钥用于加密。相反的函数是openssl_public_decrypt,因为receiver's public 密钥用于解密
  • @user1873420:您使用openssl_private_encrypt 加密(使用私钥),然后使用openssl_public_decrypt 解密(使用公钥)。
  • @RocketHazmat 您说可以使用私钥进行加密以及表明 SSL 使用私钥进行加密都是不正确的。

标签: php encryption sign


【解决方案1】:

通常,OpenSSL 使用私钥加密方法用于提供非常特定的 SSL 签名生成方法:

连接多个哈希函数的输出会产生冲突 抵抗力与算法中包含的最强算法一样好 串联结果。例如,旧版本的 TLS/SSL 使用 连接的 MD5 和 SHA-1 和;确保找到的方法 其中一项功能的冲突不允许伪造流量 受这两种功能的保护。

来源:查看cryptographic hash function 的维基百科页面并查找加密哈希函数的串联。

由于大多数库不提供这样的签名格式(并且由于签名的 SSL 版本不使用散列周围的嵌入式 ASN.1 结构),因此大多数情况下使用加密函数来实现。您遇到的不同之处可能是缺少 ASN.1 结构(请参阅 PKCS#1 v2.1 标准以了解我所说的 ASN.1 结构)。

您可以打赌它使用 PKCS#1 填充 签名 而不是用于加密的填充。并且,如前所述,它不包含 ASN.1 结构或哈希,而是使用给定的给定数据代替 ASN.1 结构。

不建议在现有(已弃用)协议的支持之外使用此功能。如果您将其用于加密目的,您使自己容易受到各种攻击,所以请不要犯这个错误。

【讨论】:

  • 我希望这个答案也能对你之前的问题有所帮助:)
猜你喜欢
  • 2019-02-19
  • 2015-10-27
  • 2021-01-09
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多