我正在使用laravel构建基本的加密聊天应用程序。我试图在给定用户注册时生成的私钥的情况下对用户进行身份验证。
用户'公钥存储在DB中。当用户想要登录时,需要上传给他们的私钥。我想比较数据库中的公钥和原始私钥中的公钥。
/**
* Validate user key file for login
*/
public function validateKey($attribute, $value, $parameters){
if (!($value instanceof UploadedFile)) return false;
// Get user to match key
$user = $this->data['username'];
// Get public key from file
$privateKey = File::get($value->getRealPath());
dd($privateKey);
}
我能够以字符串格式获取私钥。从这里开始,我似乎无法生成或提取公钥来与DB值进行比较。
答案 0 :(得分:4)
他们也应该永远不会将他们的私钥上传到您的服务器。您永远不应该将您的私钥放在远程位置。
拥有两个密钥的关键是一个密钥可以解密由另一个密钥加密的任何消息。大多数算法中公钥和私钥之间的主要区别或多或少都是您保密的哪一个以及您共享哪一个。在RSA中,指定了私钥,但您仍然不想上传或共享它。
编辑:〜这不是公钥/私钥的工作方式。你不能从另一个中提取一个。如果可以,那就会破坏非对称加密的目的.~
正如@iainn指出的那样,您可以从RSA私钥中提取公钥,但我仍然不建议让用户上传他们的私钥。