zoukankan      html  css  js  c++  java
  • 转:哈希加密

    Hashing Passwords – Python Cryptography Examples

    Building a from-scratch server or using a lightweight framework is empowering. With that power comes responsibility, specifically the responsibility to securely store user’s passwords.

    从头开始构建服务器或使用轻量级框架是授权。随之而来的是责任,特别是安全存储用户密码的责任。

    Not understanding the security implications of password storage can lead to devastating breaches and leaks. If you are building an application and need to store user credentials, learn about hash functions.

    Can I Store Passwords In Plain Text?

    To demonstrate the potential dangers, let us assume we DON’T hash passwords on a fake example website, LoveMatchingToday. Inevitably when a hacker or disgruntled employee obtains access to LoveMatchingToday’s database, they will download all the usernames and passwords://///// disgruntled:不怀好意的

    user.one@gmail.com – somePa$$wordHere

    User.one@gmail. com-somePa $wordHere

    user.two@hotmail.com – otherPlainTextPass

    2@hotmail. com-otherplainpass

    Now the attacker can go to other websites, and because a majority of people reuse passwords on different websites, they can hack other systems.

    Solution – Hashing

    A hash function (or more specifically in our case, a key derivation function) deterministically creates a strong key from a password. Because hashes are one-way, the attacker can’t re-create the plaintext password from the hash. Now the attacker would find something like this in the database:////明文///密钥////重建

    user.one@gmail.com – cab864878af008fbc550087940ffacdb79a7f82201725e3350e25d6cfbdd4255

    User.one@gmail. com-cab864878af008fbc550087940ffacdb79a7f82201725e3350e25d6cfbdd4255

    user.two@hotmail.com – 42a7fd2b639d18b3aba5db8504d4530f1f1ab58ab9615414b7629d6ec5c157b8

    User.two@hotmail.com-42a7fd2b639d18b3aba5db8504d4530f1f1ab58ab9615414b7629d6ec5c157b8

    In Python, Bcrypt is a strong key derivation function that can be used in production systems:

    Rainbow Tables and Salts

    You may have wondered in the above code snippet what the gensalt() function does. If we were to hash passwords without salts, an attacker could do a rainbow table attack in order to find the original plain text.

    A salt is a random string of data hashed alongside a password to keep the hash result unique. Salts should be recreated each time a new password is saved, and the salt is stored alongside the hashed result so that it can be used again for comparison. Libraries like bcrypt are smart enough to store the salt IN the resulting string so that developers don’t need to do the extra work.

    For example, let’s say that LoveMatchingToday wisened up and started hashing passwords, but didn’t include unique salts. An attacker could have a precomputed table of hashes:

    aab864878af008fbc550087940ffacdb79a7f82201725e3350e25d6cfbdd425f = password123

    864878af008fbc550087940ffacdb79a7f82201725e3350e25d6cfbdd425f = password123

    afg3683232297323f2f0087940ffacdb79a7f8284723732350e25d6cfbdd4cccc = shadowTheHedgehog1234

    3683232297323f2f0087940ffacdb79a7f8284723732350e25d6cfbdd4cccc = shadowthehoge1234

    They could then check each hash they find and see if a hash matches an entry in their table. If so, they can effectively “reverse” the hash and learn the original plaintext.

    For this reason, we need to salt passwords. Luckily Bcrypt handles salting automagically. For the sake of learning, however, let’s assume they didn’t. If they didn’t, our pseudocode would look something like this:

    # Save new password
    salt = creatRandomSalt()
    hashedPassword = hash(newPassword.concat(salt))
    database.save(hashedPassword, salt)
    
    # Check password
    hashedPassword, salt = database.GetUserCredentals()
    passwordInput = userInput
    if hash(passwordInput.concat(salt)) == hashedPassword:
      login()
    else:
      failure()
    

    转自:


    Hashing Passwords – Python Cryptography Examples

  • 相关阅读:
    C# SocketUdpServer
    C# HttpHelper
    控制台禁止操作
    Modbus Com SerialPort
    postgresql 备份与恢复
    Firebird 表字段查询
    Postgresql 连接更新
    第 1 章 计算机组成与体系结构 1.1计算机系统组成
    系统架构设计师教程(第4版)
    阿里十年架构师用一张图告诉你什么是系统架构师
  • 原文地址:https://www.cnblogs.com/xiaofeisnote/p/13387565.html
Copyright © 2011-2022 走看看