代码之家  ›  专栏  ›  技术社区  ›  UnkwnTech

加密密码

  •  30
  • UnkwnTech  · 技术社区  · 16 年前

    在(php首选)中加密密码的最快但安全的方法是什么?您选择哪种方法是可移植的?

    换句话说,如果我以后将我的网站迁移到其他服务器,我的密码会继续工作吗?

    我现在使用的方法,如我所知,取决于安装在服务器上的库的确切版本。

    7 回复  |  直到 6 年前
        1
  •  31
  •   Sam Saffron James Allen    12 年前

    如果你正在为你的登录系统选择一种加密方法,那么速度不是你的朋友,杰夫和托马斯·普塔切克就密码和 conclusion 您应该使用最慢、最安全的加密方法。

    来自托马斯·普塔切克的博客:
    在密码散列函数中,速度正是您不想要的。

    现代密码方案受到增量密码破解器的攻击。

    增量破解程序不会预先计算所有可能的破解密码。他们分别考虑每个密码散列,并像您的PHP登录页面那样通过密码散列函数来输入字典。像ophcack这样的彩虹表破解程序使用空间攻击密码;像开膛手john、crack和lc5这样的增量破解程序使用时间:统计和计算。

    密码攻击游戏是在破解密码X所用的时间内得分的。对于彩虹表,时间取决于你的表需要多大以及你搜索它的速度。使用增量破解程序,时间取决于密码哈希函数运行的速度。

    优化密码散列函数的效果越好,密码散列函数的速度越快,方案就越弱。MD5和SHA1,甚至像DES这样的传统分组密码,都设计得很快。MD5、SHA1和DES是弱密码哈希。在现代CPU上,像des和md5这样的原始加密构建块可以被位分割、矢量化和并行化,从而使密码搜索速度极快。通过FPGA实现游戏的成本只有数百美元。

        2
  •  15
  •   Karl Seguin    16 年前

    我和彼得在一起。开发人员似乎不理解密码。我们都选择(我也对此感到内疚)MD5或SHA1,因为它们速度很快。想想这件事(因为最近有人向我指出了这件事),没有任何意义。我们应该选择一个愚蠢缓慢的哈希算法。我的意思是,在事情的规模上,一个繁忙的网站会散列密码什么?每1/2分钟?谁在乎它是否需要0.8秒而不是0.03秒的服务器时间?但是,这种额外的缓慢对于防止所有类型的普通野蛮的割礼攻击来说都是巨大的。

    在我看来,bcrypt是专门为安全密码散列而设计的。它基于河豚,有很多实现。

    对于php,请查看phppass http://www.openwall.com/phpass/

    对于任何使用.NET的人,请查看bcrypt.net http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

        3
  •  8
  •   Ian Boyd    13 年前

    应该指出的是,你不想 加密 密码,您要 搞砸 它。

    加密的密码可以解密,让别人看到密码。散列是一种单向操作,因此用户的原始密码(密码学)已不复存在。


    至于应选择哪种算法-使用当前接受的标准算法:

    • 沙阿256

    当您散列用户的密码时,一定要用它散列其他一些垃圾。例如。:

    • 密码: password1
    • 盐: PasswordSaltDesignedForThisQuestion

    将salt附加到用户密码:

    String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
    
        4
  •  7
  •   Anthony Giorgio    16 年前

    不管你做什么,不要写你自己的加密算法。这样做几乎可以保证(除非你是个密码学家)算法中会有一个缺陷,使破解变得简单。

        5
  •  2
  •   UnkwnTech    16 年前

    我不一定要寻找最快的,但一个很好的平衡,一些正在开发这段代码的服务器相当慢,散列和存储密码的脚本运行需要5-6秒,我已经把它缩小到散列(如果我评论散列,它会在1-2秒内运行)。

    它不一定是最安全的,我现在不在乎银行,但我肯定 不会 将密码存储为纯文本。

        6
  •  2
  •   Kamil Kiełczewski    8 年前

    考虑使用 bcrypt 它在许多现代框架中使用,如Laravel。

        7
  •  0
  •   Jeff Harris    6 年前

    password_hash ( string $password , int $algo [, array $options ] ) . (php 5>=5.5.0,php 7)

    password_hash()使用强大的单向哈希算法创建新的密码哈希。密码_hash()与crypt()兼容。因此,crypt()创建的密码散列可以与password_hash()一起使用。