密碼加鹽原理及shiro實現
看了一段時間各種資料,才算是理解密碼保護中,加鹽的好處及實現方式,總結如下:
1. 密碼在資料庫儲存方式
a. 明文儲存
username | pwd |
liukunbendan | liukun |
b. 加密儲存
username | pwd(sha512) |
liukunbendan | (sha512 (liukun)) 3afb1e6d5177393678787b96171feccf22aec73c73cf61aed015f804cba9dd2bdb16f2ad9cf8738d4a00302d747cf5861dd820989b2562bb60f97710dc6b06af |
這種情況下,黑客拿到資料庫後,課使用暴力窮解破解(或者使用rainbow table彩虹表 來快速匹配hash值)
rainbow table: 黑客根據常用密碼/(其他被盜庫的密碼) 生成hash值,直接查詢
c. 加密+加鹽 儲存
username | pwd(sha512) | salt - 系統隨機產生,每個使用者都不一樣 |
liukunbendan | (sha512 (liukun) + (123)) b80500a9cae49b336e246e41ffd65ffccd95f198d95065ec814733ecc9e71b72acaaf9300fdd4f53c36bd8b4c73bffbeb39ab9a945147c4d7a0b6f04ddb37b9d | 123 |
2. shiro實現
我使用的函式如下:
String passwordEncode = new SimpleHash("SHA-512","password","abc",1).toString();
該函式有4個引數: 加密方法(md5, SHA-1, SHA-256, SHA-512 等等),“密碼明文”,"鹽值" hash次數
實際執行中,後臺會以 hash("abc(salt)" "password") 的方式計算得出結果
例如,上面函式結果為:
be8795e7a4b2a9d3cd0ab93cfc1d1143dc428ae3f2a8acefa0b565baecf4985a8ad6dd39b755cfad972601de596a3fdb25baf592b552a6b1968d49d3c955c49f
找了一個線上加密解密網址(), 計算明文abcpassword的sha-512雜湊結果如下:
be8795e7a4b2a9d3cd0ab93cfc1d1143dc428ae3f2a8acefa0b565baecf4985a8ad6dd39b755cfad972601de596a3fdb25baf592b552a6b1968d49d3c955c49f
可見他們是一致的
總結:
使用 hash (password + salt) 並不能完全防止黑客盜庫後暴力破解/彩虹表破解 密碼,只是大大 增加了破解成本。
網站安全需要和其他措施一起使用:
Https, password和salt分開儲存 等等
相關推薦
密碼加鹽原理及shiro實現
看了一段時間各種資料,才算是理解密碼保護中,加鹽的好處及實現方式,總結如下:1. 密碼在資料庫儲存方式a. 明文儲存username pwd liukunbendan liukun 這種情況下,資料庫如果被拖庫,使用者資訊(核心就是使用者名稱/密碼)就直接洩露b. 加密儲
【密碼學】維吉尼亞密碼加解密原理及其破解演算法Java實現
1. 維吉尼亞密碼方陣 人們在愷撒移位密碼的基礎上擴展出多表密碼,稱為維吉尼亞密碼。該方法最早記錄在吉奧萬·巴蒂斯塔·貝拉索( Giovan Battista Bellaso)於1553年所著的書《吉奧萬·巴蒂斯塔·貝拉索先生的密碼》 第一行代表明文字母
JavaScript動態檢測密碼強度的原理及實現
在註冊賬戶,設定密碼時,會出現密碼強度動態檢測,網上看了一些帖子,大多隻寫了具體的實現過程,而沒有對原理的分析過程。下面著重講一下其原理。 原理分析 通常實現密碼強度動態判斷有兩種方案實現: 正則。但其效率低一點,難度也大一些。 字串,函式和運算子。
springboot thymeleaf和shiro 整合 第三篇 密碼加鹽
package com.ruiguang.config;import java.util.UUID;import org.apache.shiro.crypto.hash.SimpleHash;import org.apache.shiro.util.ByteSource;i
淺談密碼加SALT原理
是否 get 註冊 我們 隨機 blank ref .com 使用 我們知道,如果直接對密碼進行散列,那麽黑客可以對通過獲得這個密碼散列值,然後通過查散列值字典(例如MD5密碼破解網站),得到某用戶的密碼。 加Salt可以一定程度上解決這一問題。所謂加Salt方法,就是
雙目相機標定以及立體測距原理及OpenCV實現
ada eps 左右 flag 並且 length turn iostream 中一 作者:dcrmg 單目相機標定的目標是獲取相機的內參和外參,內參(1/dx,1/dy,Cx,Cy,f)表征了相機的內部結構參數,外參是相機的旋轉矩陣R和平移向量t。內參中dx和d
nodejs進階:密碼加鹽:隨機鹽值
nod sharp class oms word blog 輸出 arp har demo var crypto = require(‘crypto‘); function getRandomSalt(){ return Math.random().toStri
Vue數據綁定原理及簡單實現
fragement observe images als 統一 rst react github上 each 本篇文章中的代碼只是部分片段,完整代碼存放於github上https://github.com/Q-Zhan/simple-vue。 進入正文~實現數據綁定主要是要
常見的查找算法的原理及python實現
put arch img 字典 python實現 需要 技術 () one 順序查找 二分查找 練習 一、順序查找 data=[1,3,4,5,6] value=1 def linear_search(data,value): flag=False
php密碼加鹽函數
func string 測試 var var_dump 函數 turn pass code 代碼: /* @desc:php密碼加鹽函數 @param pass 原密碼 @param salt 鹽 @return ret 加密後的密碼 */ function passsal
短時傅裏葉變換(Short Time Fourier Transform)原理及 Python 實現
src 參考 函數 ade block return 技術 數學公式 def 原理 短時傅裏葉變換(Short Time Fourier Transform, STFT) 是一個用於語音信號處理的通用工具.它定義了一個非常有用的時間和頻率分布類, 其指定了任意信號隨時間
C++智能指針,指針容器原理及簡單實現(auto_ptr,scoped_ptr,ptr_vector).
同時 構造對象 pop 所有 main 操作 bject str 運算 目錄 C++智能指針,指針容器原理及簡單實現(auto_ptr,scoped_ptr,ptr_vector). auto_ptr scoped_ptr ptr_vector C++智能指針,指針容器
線程池原理及python實現
source 實例 以及 代碼 let range python實現 queue 上界 https://www.cnblogs.com/goodhacker/p/3359985.html 為什麽需要線程池 目前的大多數網絡服務器,包括Web服務器、Email服務器以
密碼加鹽
md5 bin tin pass 字符串 ack exceptio cep port import java.security.MessageDigest;import java.util.Random; import com.sun.org.apache.xerces.i
Android中的Apk的加固 加殼 原理解析和實現
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OpenCV(一)——高斯卷積核原理及程式碼實現
貼出getGaussianKernel原始碼 在smooth.cpp中 提示:Gaussian核基於 正態分佈函式設計 μ是均值,σ^2是方差 正態函式(即一維Gaussian卷積核)如下 二維卷積核通過對一維積分得到,並且μ = 0 根據如下原始碼可知
微信公眾號掃碼登陸原理及程式碼實現
1.使用者開啟公眾號點選掃碼功能(注意我們用 scancode_waitmsg這種型別即可) 2.使用者掃描了二維碼會給微信傳送資訊,然後微信把資訊以XML格式傳送給我們的伺服器 3.接收資料,並把資料保存於資料庫或者快取,程式碼如下: $wechatObj = new
使用者密碼加鹽加密
使用bcrypt bcrypt是一種跨平臺的檔案加密工具。由它加密的檔案可在所有支援的作業系統和處理器上進行轉移。它的口令必須是8至56個字元,並將在內部被轉化為448位的金鑰。(http://www.atool.org/hash.php) 網站,可以直觀的看一下加密的演算法。 1、用npm
蒙特.卡羅方法求解圓周率近似值原理及程式碼實現
原理 對於某些不能精確求解的問題,蒙特.卡羅方法是一種非常巧妙的尋找近似解的方法。 以求解圓周率的問題為例,假設有一個單位圓及其外切正方形,我們往正方形內扔飛鏢,當扔的次數足夠多以後,“落在圓內的次數/落在正方形內的次數”這個比值會無限接近“圓的面積/
大資料教程(8.2)wordcount程式原理及程式碼實現/執行
上一篇部落格分享了mapreduce的程式設計思想,本節博主將帶小夥伴們瞭解wordcount程式的原理和程式碼實現/執行細節。通過本節可以對mapreduce程式有一個大概的認識,其實hadoop中的map、reduce程