2014-09-01 29 views
0

我正在为我的网站开发一个使用Laravel 4的私人消息系统,并且我想确保消息保持私密。到目前为止,我有以下的代码写成:如何加密和存储私人消息?

class PkeyEncryption { 

    public static function encrypt($input, $cipher = MCRYPT_RIJNDAEL_128) { 

     $key = sha1(microtime(true) . mt_rand(10000, 90000)); 

     $iv_size = mcrypt_get_size($cipher, MCRYPT_MODE_CFB); 
     $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 

     return mcrypt_encrypt($cipher, $key, $input, MCRYPT_MODE_CFB, $iv); 
    } 

    public static function decrypt($data, $key, $cipher = MCRYPT_RIJNDAEL_128) { 

     $iv = $data['iv']; 
     $data = $data['data']; 

     return mcrypt_decrypt($cipher, $key, $data, MCRYPT_MODE_CFB, $iv); 
    } 
} 

所以,我知道如何的信息进行加密,并且我也知道,我可以存储IV消息并肩作战。但是,我不知道我应该在哪里存储公钥。我已经在网站上阅读了其他一些问题,但我仍然没有找到答案。有人可以指点我正确的方向吗?

+2

请注意,如果Web服务器可以访问解密信息(密钥和IV),那么攻击者也能够访问它。 – cdhowie 2014-09-01 21:40:43

+0

存储关键客户端(例如,在cookie中?) – ferdynator 2014-09-01 21:43:40

+0

因此,我可以将密钥存储在网站或其他服务器上吗? – 2014-09-01 21:44:04

回答

0

您必须将所有用户公钥存储在服务器上,并且只有用户本身应拥有自己的私钥。

当用户A想要发送消息给用户B时,他将采取用户B的公钥并用它加密该消息。该消息然后可以仅用用户B私钥解密。

+0

因此,用户B必须实际拥有他/她的私钥吗? – 2014-09-01 23:53:38

+0

确实。这是通过SSL证书实现的。不对称密码学。 – bulforce 2014-09-02 10:19:57