PHP中的公钥/私钥等系统

时间:2012-02-25 08:57:40

标签: php authentication encryption

对于我的自动登录脚本,我正在考虑实施以下内容:

  • 用户获得存储在cookie中的某种个人“公钥”
  • 因为我不想在数据库中保存完全相同的密钥我想创建匹配的“私钥”
  • 检测到cookie时,检索存储在数据库中的密钥,并检查2个密钥之间的公/私关系

没有openSSL等在php中实现此功能的最佳方法是什么。

这就是我现在所拥有的:

$public = hash($hash_algorithm, uniqid(rand()));
$private = hash_hmac($hash_algorithm, $public, $encryption_key);

并验证:

$check = hash_hmac($hash_algorithm, $public, $encryption_key);
return $check == $private;

$ encryption_key是配置文件中的随机密钥。

我觉得这个太简单了还是这个足够好?当然,当使用密钥时,会生成一个新密钥,如下所示:http://jaspan.com/improved_persistent_login_cookie_best_practice

1 个答案:

答案 0 :(得分:0)

尽管严格地可能创建仅使用对称密钥密码原语的公共密钥密码系统(请参阅:SPHINCS),但您可能不应该自己设计并希望它在这里是安全的。

  

在没有openSSL等的情况下用php实现此功能的最佳方法是什么。

在2018年,答案是:“ with libsodium”。但是当您问这个问题时,那实际上不是一个选择。

但是本着问题的精神:为您提供非对称密码或重新发明轮子的外部密码库没有解决方案。