在加密中,我们使用接收器的公钥,为什么函数中的“私有”术语?似乎与我相矛盾或困惑。
当我使用私钥时,我正在签署一些东西。看起来这个函数会得到与openssl_sign()
相同的结果,我尝试了两个并给了我不同的输出。
因为函数openssl_private_encrypt
具有“私有”和“加密”,所以我不知道它是用于加密还是用于签名。这个功能是什么?
答案 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结构。
建议不要在现有(已弃用)协议的支持之外使用此功能。如果您将其用于加密目的,将让自己容易受到各种攻击,所以请不要犯错误。