Md5盐密码php

Md5盐密码php,php,security,encryption,md5,Php,Security,Encryption,Md5,我知道关于这个问题有很多问题,但我真的需要问这个问题 今天我一直在用md5加密密码 所以我所做的就是 我有四种盐。(它们根据用户值而变化) 从电子邮件id和substr,然后md5将其删除 来自电子邮件和id substr其他职位 一个长字符串,substr它,然后md5它 另一个长字符串,substr它,然后md5它 然后我使用md5 salt1和salt3以及salt2和salt4的密码 在此之后,每当用户更改其电子邮件或id时,我必须自动更改密码 你们怎么看 它不好,因为它使用MD5 MD

我知道关于这个问题有很多问题,但我真的需要问这个问题

今天我一直在用md5加密密码

所以我所做的就是

我有四种盐。(它们根据用户值而变化)

  • 从电子邮件id和substr,然后md5将其删除
  • 来自电子邮件和id substr其他职位
  • 一个长字符串,substr它,然后md5它
  • 另一个长字符串,substr它,然后md5它
  • 然后我使用md5 salt1和salt3以及salt2和salt4的密码

    在此之后,每当用户更改其电子邮件或id时,我必须自动更改密码


    你们怎么看

    它不好,因为它使用MD5

    MD5是一种非常快速的操作。它可以在图形卡硬件上每秒执行数十亿次。将其用于任何与密码相关的事情被认为是不好的做法


    使用bcrypt。使用随机盐。使用即将发布的PHP API对密码进行哈希、验证和重新哈希。这个include文件为从PHP5.3.7开始的版本实现它:

    我个人不建议将用户id和他的电子邮件包含在他的密码散列中。 您可以通过以下方式处理密码:

    • 基于用户注册时生成的随机字符串的每个用户动态salt
    • 在盐的一部分前面加上前缀,在密码周围加上另一部分
    • 双md5:md5(md5($password))
    • 等等
      • 什么都没有

        MD5坏了,坏了

        使用邮件地址作为salt是一个好主意。但使用md5并非如此。请改用bcrypt、scrypt或pbkdf2


        不要发明你自己的加密,除非你真的知道你在做什么,相信我,你不会

        一个简单的方法是为每个用户生成一个随机的salt,然后像这样散列你的密码

        public function encodePassword( $raw, $salt ) {
            return hash('sha256', $salt.$raw);
        }
        
        对于高安全性哈希,您可以查看此链接,该链接解释了如何实现PBKDF2:


        首先,让我们定义几个术语

        • 加密是指对邮件进行编码,使其无法读取。加密涉及a、a和a。这就像把一本书(明文)放在一个锁着的房间里(密码),只能用已知的工具(钥匙)打开。加密有很多种,但这只是一个简单的描述。加密是双向的,这意味着您可以对消息进行编码和解码

        • 加密哈希是指获取任何类型的数据并为其生成固定大小的值(通常称为哈希或摘要)。加密哈希是单向的,这意味着您无法反转该过程

        • salt是一个唯一的字符串或一组位,类似于A(只使用一次的唯一数字)。盐只会使破解者无法处理哈希列表。它们不应被用作秘密(即,类似于加密密钥)。当谈到盐时,人们通常谈论随机性的唯一原因是因为他们想要产生一种独特的盐(例如,如果随机性不够大,他们可能会得到碰撞盐)

        好的,现在来看看如何散列密码

        对密码进行散列的一种相对安全的方法是简单地在密码上添加一个唯一的散列,然后用密码保存salt:

        $pass = 'this is my password';
        $salt = uniqid('', true);
        $hash = sha1($pass . $salt);
        // INSERT INTO users ('hash', 'salt') VALUES ('$hash', '$salt') WHERE ...
        

        如果你的网站没有从用户那里检索到任何敏感数据,那么这是一个不错的方法

        如果您处理敏感数据,或者如果您只是想确保尽一切努力确保内容安全,那么有一个PHP函数可以为您进行哈希处理。它被称为(阅读文档了解其工作原理)。下面是如何使用函数散列密码的示例:

        $pass = 'this is my password';
        $salt = 'unique string';
        $hash = crypt($password, '$2y$07$'.$salt.'$');
        echo $hash;
        
        这将安全地散列密码

        需要意识到的是,
        crypt()
        函数比你能想到的任何东西都要安全得多(除非你是这方面的专家)

        在较新版本的PHP(5.5.0+)中,有一种更简单的密码散列方法

        还有各种散列库。是一个很受欢迎的版本。

        嗯,“MD5坏了”有点夸张。即使它可以被大量的CPU强制使用,它也不是“坏的”,对于许多涉及散列的事情来说,它仍然是一个非常有用的算法

        所以“MD5不应该用于密码加密”对我来说听起来好多了

        当使用PHP时,一个简单而安全的选择是依赖于(本机生成随机salt)和函数


        优点是加密算法将随每个新的PHP版本透明地更新(目前,
        PASSWORD\u DEFAULT
        设置为
        bcrypt
        ,但如果bcrypt被“破坏”,则可以设置为更新的算法),这使得任何使用这些函数的代码都具有相当的弹性。

        不要使用自己的加密方案。使用经过良好测试和分析的系统,例如,也可以提供不同数量的炮弹。你不妨将盐通过搅拌器:)不,对不起。使用MD5是不好的。把它翻一番,你将一事无成。盐只需要是独一无二的,随机性是无关紧要的;盐是如何使用的,差别不大;而双重散列会让事情变得不那么安全。是的,但用户询问的是md5,我个人不建议使用它,但如果他没有安装PHP 5.3+或mcrypt,他至少可以使用SHA1…md5在您的答案中-这可以被视为一个建议。你没有建议任何其他标有“更好”的东西。@Sverri M.Olsen:你说它不太安全,不是我。你在传播你无法证明的信息。你为什么认为这是正确的?如果有人写了一些没有证据的东西,这并不意味着你应该相信它。安全性是一个可怕的精确的东西:如果有什么东西被陈述,它可能是,也应该被证明,否则它就是胡说八道。所以它能做的就是