Php 有没有理由更喜欢openssl_pkey_get_private而不是在内存中加载它?

Php 有没有理由更喜欢openssl_pkey_get_private而不是在内存中加载它?,php,security,openssl,php-openssl,Php,Security,Openssl,Php Openssl,我想知道为什么在PHP中有不同的方式使用openssl函数: 以字符串形式传递密钥(例如,使用文件\u get\u contents()加载密钥,或将其存储在env变量中) 将密钥文件作为文件名传递:file:///var/keys/private_key 使用openssl\u pkey\u get\u private()加载密钥,然后使用openssl\u free\u key() 是否有理由选择特定的方法?上一个解决方案是否能够更好地处理密钥如何从内存中加载/释放(如果是这样的话,这是

我想知道为什么在PHP中有不同的方式使用openssl函数:

  • 以字符串形式传递密钥(例如,使用
    文件\u get\u contents()
    加载密钥,或将其存储在env变量中)
  • 将密钥文件作为文件名传递:
    file:///var/keys/private_key
  • 使用
    openssl\u pkey\u get\u private()
    加载密钥,然后使用
    openssl\u free\u key()

是否有理由选择特定的方法?上一个解决方案是否能够更好地处理密钥如何从内存中加载/释放(如果是这样的话,这是否会对安全产生影响)?

最大的区别之一是
openssl\u pkey\u get\u private
接受一个密码短语来解密密钥,而其他方法则没有。@deceze这是一个很好的观点,我没有想到这一点!我没有使用密码短语,所以我没有注意到这种差异。我想知道这是否是唯一的一个,但我最好奇的是关于如何加载密钥的可能的安全含义。我希望
file://..
openssl\u pkey\u get\u private
同样安全,因为openssl可以控制何时何地加载内容。将密钥作为字符串传递意味着PHP将其存储在内存中,并在某个不确定的点对其进行垃圾收集,这可能会降低安全性。然而,我不知道具体的实现细节,这只是猜测。