如何安全加密密码

时间:2012-11-27 03:53:48

标签: php codeigniter

首先,我想迭代我不会问如何HASH密码(例如salting / bcrypt / etc)。对于我已完成的其他项目,我总是对密码进行哈希处理,但在这种情况下,我需要暂时重新获得密码。

基本上,我需要在我的数据库中存储密码,然后再次访问它。在codeigniter(我正在使用的框架)中,他们使用mcrypt和密钥(他们建议应该是32个字符长)。这样就够了吗?

修改

询问的原因:我需要能够向用户发送关键任务敏感PDF并希望用密码保护它们(理想情况下使用相同的密码)。

在与SO和关闭的人讨论之后,我得出的结论是,你永远不应该加密密码并且总是哈希/加盐。想想有多少人使用相同的密码/电子邮件来提供不同的服务。因此,我得出结论,如果您需要加密项目,您应该使用单独的PIN或其他非必要项目。

然而,即使我要去引脚路线并保持密码哈希,我仍然非常好奇你将如何理论上解决这个问题。

1 个答案:

答案 0 :(得分:3)

是的,只要您将SALT值保密。

更新:似乎人们对简单的答案不满意。通过使用mcrypt扩展程序,您可以使用特定的机密值SALT加密数据。如果人们不知道SALT,他们就无法解密该值。

示例:

<?php 
    define('SALT', 'whateveryouwant'); 

    function encrypt($text) 
    { 
        return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SALT, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
    } 

    function decrypt($text) 
    { 
        return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SALT, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
    } 
?> 

当然,如果您需要额外的安全性,请考虑使用公钥基础结构。