与术语openssl_private_encrypt混淆

时间:2013-02-18 19:22:19

标签: php encryption sign

在加密中,我们使用接收器的公钥,为什么函数中的“私有”术语?似乎与我相矛盾或困惑。

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

因为函数openssl_private_encrypt具有“私有”和“加密”,所以我不知道它是用于加密还是用于签名。这个功能是什么?

1 个答案:

答案 0 :(得分:2)

通常,使用私钥方法的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结构。

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