国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

給你的密碼加鹽

Y3G / 1994人閱讀

摘要:第三階段這種方式是在實習中學習到的,也就是對密碼來進行加鹽。什么是加鹽在密碼學中,是指通過在密碼任意固定位置插入特定的字符串,讓散列后的結果和使用原始密碼的散列結果不相符,這種過程稱之為加鹽。

寫在前面

本文描述了本人,對于數據庫中如何保存密碼的認識過程。從最簡單的明文保存到密碼加鹽保存,下面與大家分享下:

第一階段

最開始接觸web開發時,對于用戶表的密碼基本是明文保存,如:

username | password
---------|----------
zp1996   |123456
zpy      |123456789

這種方式可以說很不安全,一旦數據庫泄漏,那么所以得用戶信息就會被泄漏。之前,國內普遍采用這種方式,造成了很多的事故,如csdn600萬用戶信息泄漏、12306用戶信息泄漏等。

第二階段

本人大學做過的所有的項目基本采用的都是這種方式來保存用戶密碼,就是對密碼進行md5加密,在phpmd5即可,在node中利用crypto模塊就好:

const encrypt = (text) => {
    return crypto.createHash("md5").update(String(text)).digest("hex");
};

作為初學者的我,認為這種方式是很安全的,因為md5不可逆(指攻擊者不能從哈希值h(x)中逆推出x)而且碰撞幾率低(指攻擊值不能找到兩個值x、x"具有相同的哈希值);然而這種方式也是不安全的,只要枚舉出所有的常用密碼,做成一個索引表,就可以推出來原始密碼,這張索引表也被叫做“彩虹表”(之前csdn600萬用戶明文密碼就是一個很好的素材)。

第三階段

這種方式是在實習中學習到的,也就是對密碼來進行加鹽。

什么是加鹽?

在密碼學中,是指通過在密碼任意固定位置插入特定的字符串,讓散列后的結果和使用原始密碼的散列結果不相符,這種過程稱之為“加鹽”。

加鹽很好理解,就是給原始密碼加上特定的字符串,這樣給攻擊者增加攻擊的成本,加鹽的關鍵在于如何選擇鹽:

固定字符串

采用固定的字符串作為鹽,如下面這樣:

const encrypt = (text) => {
    text = text + "zp";
    return crypto.createHash("md5").update(text).digest("hex");
};

這種加鹽方式與多進行幾次md5一樣的,沒有任何意義,攻擊者都可以拿到數據庫,難道拿不到源代碼嗎,根據源代碼攻擊者很輕松的就可以構造新的彩虹表出來逆推密碼。

隨機字符串

鹽一般要求是固定長度的隨機字符串,且每個用戶的鹽不同,比如10位,數據庫可以這樣存儲:

username | password                         |salt  
---------|---------—------------------------|----------
zp1996   |2636fd8789595482abf3423833901f6e  |63UrCwJhTH   
zpy      |659ec972c3ed72d04fac7a2147b5827b  |84GljVnhDT

采用的加密方式為:

md5(md5(password) + salt)

將其轉化為node代碼:

/*
 * 10位鹽
 * 時間戳(2)+隨機字母(8)
 */
const salt = () => {
    var time = Date.now() % 100,
        str = "";
    time = time === 0 ? "00" : String(time);
    for (let i = 0; i < 8; i++) {
        const base = Math.random() < 0.5 ? 65 : 97;
        str += String.fromCharCode(
            base + 
            Math.floor(
                Math.random() * 26 
            )
        );
    }
    return time + str;
};
const md5 = (text) => {
    return crypto.createHash("md5").update(String(text)).digest("hex");
};
const encrypt = (password) => {
    return md5(md5(password) + salt());
};
寫在最后

以隨機字符串作為鹽對密碼進行加鹽僅僅是增加破解密碼的難度,假如目前有30w的用戶數據,那么就會有30w個鹽,利用600w的索引表去比對的話,需要創造出30w*600w的數據來一一比對,這樣會增加攻擊者的成本。以上內容,如有錯誤,歡迎大家指出。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88113.html

相關文章

  • [轉]MD5(1)-安全性與原理

    摘要:沒錯,年的破解就是證明了在碰撞上面不可靠,也就是可以通過某種方式快速的找到具有相同散列值的另一個信息。好,第二個不安全的誤區來了上述破解過程對于絕大多數散列函數來說,基本上都是一個道理。 轉載請注明出處 http://www.paraller.com 原文排版地址 點擊獲取更好閱讀體驗 轉載: http://blog.sina.com.cn/s/blog_77e8d1350100w...

    ideaa 評論0 收藏0
  • 漫話密碼存儲

    摘要:通俗一點說就是彩虹表犧牲了一點計算速度,換來的好處是較少的空間存儲更多的密碼數據。關于鹽的使用有一點需要說明加鹽的目的是為了增加提前構造字典和彩虹表的代價,并不是為了加密或增加密碼的計算復雜性。 背景 密碼是用來進行鑒權(身份認證)一種手段,說白了就是證明你是誰。一般鑒權都可以總結為下面3種形式: 你知道什么? (如密碼,密碼提示問題等) 你有什么? (如信用卡,token卡等) 你...

    Godtoy 評論0 收藏0
  • nodejs-md5加鹽到解密比對

    摘要:加密工具模塊提供了加密功能,包括對的哈希加密解密簽名以及驗證功能的一整套封裝。當然也是優缺點的加密相同的字符是結果都是相同的碼,會出現撞庫的風險。 nodejs-crypto 加密工具 crypto 模塊提供了加密功能,包括對 OpenSSL 的哈希、MD5、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。 crypto 常用的MD5 MD5 是一種不可逆的加密算法,目前是最牢靠...

    MasonEast 評論0 收藏0
  • Python中MD5加密

    摘要:的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被壓縮成一種保密的格式就是把一個任意長度的字節串變換成一定長的十六進制數字串。獲取由位隨機大小寫字母數字組成的值每次從中隨機取一位獲取原始密碼的值原始密碼隨機生成位加密后的密碼 MD5是什么 下面的概念是百度百科的: Message Digest Algorithm MD5(中文名為消息摘要算法第五版)為計算機安全領域廣泛使用的一種散列...

    chadLi 評論0 收藏0

發表評論

0條評論

Y3G

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<