php - 如何安全地加密密码

标签 php codeigniter

首先,我想重申一下,我并不是在问如何对密码进行哈希处理(例如加盐/bcrypt/等)。对于我完成的每个其他项目,我总是对密码进行哈希/加盐处理,但在这种情况下,我需要暂时重新获得密码。

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

编辑:

询问的原因:我需要能够向用户发送关键任务的敏感 PDF,并希望对其进行密码保护(最好使用相同的密码)。

在与人们进行讨论后,我得出的结论是,你永远不应该加密密码并始终对其进行哈希/加盐。想想有多少人使用相同的密码/电子邮件来获取不同的服务。因此,我得出的结论是,如果您确实需要加密某个项目,则应该使用单独的 PIN 或其他非必需项目。

但是,即使我要走 pin 路线并保持密码散列,我仍然很好奇您理论上会如何解决这个问题。

最佳答案

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

更新:似乎人们对简单的答案不满意。通过使用 mcrypt 扩展,您可以使用特定的 secret 值 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))); 
    } 
?> 

当然,如果您想要额外的安全性,请考虑使用公钥基础设施。

关于php - 如何安全地加密密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13577150/

相关文章:

javascript - 内联编辑数据表 jquery

php - 我是 PHP CodeIgniter 的新手,MySql 出现一些错误的语法错误 "Delete Join"

php - Laravel 5 withError() 与 withErrors()

php - mysql 查询(如)和 php 的问题

php - 更改提交按钮的图像

php - 传递 javascript/ajax 参数时不会显示 codeigniter View

php - Codeigniter 在一个函数中使用三个查询

codeigniter登录无法修改头信息

php - 当mysqli INSERT失败时,catch不报告错误。

php - 允许非强制字段接受 NULL 值是一个好习惯吗? mysql