shiro 學(xué)習(xí)之加密認(rèn)證

概述

認(rèn)證過程和上一篇基本一致的(shiro 學(xué)習(xí)之認(rèn)證詳解),進(jìn)行密碼比對(duì)的時(shí)候選擇的比對(duì)器不一樣.

  • 特點(diǎn):數(shù)據(jù)庫(kù)不存密碼明文,直接存密文.
  • 注意:注冊(cè)用戶的時(shí)候加密密碼然后存儲(chǔ)密文和加密用的salt(俗稱鹽)
  • 注意2:加密的算法和 shiro 配置的解密的算法要一致

項(xiàng)目地址:https://github.com/thecattle/spring-mvc-shiro


1. SHA-256加密

1.1 創(chuàng)建加密密碼

首先我們有個(gè)賬戶,用戶名為: admin, 密碼為: password
然后通過下面的方法把密碼加密,得到的結(jié)果:
encodedPassword(密碼): qWdiGI6l8lHjpCXOSrEWOD4UX2gguGTim3hqJVe6nOc=
salt(加密用的鹽):
9Se1CbOxZNFC7a9PaiKZCQ==
把它倆都存入數(shù)據(jù)庫(kù),包括鹽,因?yàn)榻饷艿臅r(shí)候需要它.
注意:這里的hashIterations次數(shù),算法名字,是否 toBase64(),一定要對(duì)應(yīng) shiro.xml 解密的配置,否則肯定匹配不對(duì)

  /**
     * 模擬創(chuàng)建用戶時(shí)候存入的密碼和鹽
     * @param password
     */
    private void credent(String password){

        //散列隨機(jī)數(shù)
        String salt = new SecureRandomNumberGenerator().nextBytes().toBase64();
        //散列迭代次數(shù)
        int hashIterations=1024;

        /*
        shiro.xml 中  storedCredentialsHexEncoded=true 則需要 .toHex()
        shiro.xml 中  storedCredentialsHexEncoded=false 則需要 .toBase64()
         */
        String encodedPassword = new Sha256Hash(password, salt, hashIterations).toBase64();
        /*
            效果等同于上句代碼
            String encodedPassword = = new SimpleHash("SHA-256", password, salt, hashIterations);
         */
        System.out.println("encodedPassword:"+encodedPassword);
        System.out.println("salt:"+salt);
    }

    public static void main(String[] args) {
        UserDaoImpl myRealm=new UserDaoImpl();
        // 用戶的密碼為"password",現(xiàn)在把它加密
        myRealm.credent("password");
    }

那么現(xiàn)在我們的假數(shù)據(jù)就是這樣的了

image.png

1.2 shiro.xml添加配置

由上篇文章可以知道,獲取用戶憑證是在 realm 中獲取的,查看源碼可以知道 realm 中有配置加密的入口,所以在 realm 中加入配置.如下

 <!-- 配置密碼匹配器 -->
                <property name="credentialsMatcher">
                    <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                        <!-- 加密算法為SHA-256 -->
                        <property name="hashAlgorithmName" value="SHA-256"></property>
                        <!-- 加密迭代次數(shù) -->
                        <property name="hashIterations" value="1024"></property>
                        <!--是否存儲(chǔ)散列后的密碼為16進(jìn)制逆巍,為 true:.toHex(),為 false:.toBase64()-->
                        <property name="storedCredentialsHexEncoded" value="false"></property>
                    </bean>
                </property>

最后這是這樣的

image.png

1.3 realm 中返回用戶憑證

shiro 解析密碼的配置好了,現(xiàn)在配置下加解密的小橋了,現(xiàn)在的對(duì)象要返回這個(gè)了,帶鹽的

 AuthenticationInfo authcInfo1 = new SimpleAuthenticationInfo(
                    userDao.getUserName(),
                    userDao.getUserPassword(),
                    ByteSource.Util.bytes(userDao.getSalt()),
                    this.getName());

整體代碼這樣


image.png

1.4 測(cè)試

項(xiàng)目跑起來看看

可以看到我們返回的用戶憑證是這個(gè)


image.png

因?yàn)槲覀兊拿艽a匹配器設(shè)置的是這個(gè)HashedCredentialsMatcher
在認(rèn)證方法中根據(jù):

輸入明文密碼包裝的 token
realm 中根據(jù)數(shù)據(jù)庫(kù)返回的憑證 info

token 和 info 比對(duì)
得到的計(jì)算后的兩個(gè)值是一樣的 都是 a967..,所以匹配成功


image.png

就登錄成功了


image.png

2. MD5加密

MD5同上面加密幾乎一模一樣,就是算法名字改下就可以了.
創(chuàng)建密碼的時(shí)候可以用:

......
String encodedPassword = new SimpleHash(" MD5", password, salt, hashIterations).toBase64();
......

sihro.xml 中:

......
<property name="hashAlgorithmName" value="MD5"></property>
......

realm 中不變

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诞帐,一起剝皮案震驚了整個(gè)濱河市癞谒,隨后出現(xiàn)的幾起案子差凹,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蟀拷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡萍聊,警方通過查閱死者的電腦和手機(jī)问芬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寿桨,“玉大人此衅,你說我怎么就攤上這事⊥っ” “怎么了挡鞍?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)预烙。 經(jīng)常有香客問我墨微,道長(zhǎng),這世上最難降的妖魔是什么扁掸? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任欢嘿,我火速辦了婚禮,結(jié)果婚禮上也糊,老公的妹妹穿的比我還像新娘炼蹦。我一直安慰自己,他們只是感情好狸剃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布掐隐。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虑省。 梳的紋絲不亂的頭發(fā)上匿刮,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音探颈,去河邊找鬼熟丸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伪节,可吹牛的內(nèi)容都是我干的光羞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怀大,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼纱兑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起化借,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潜慎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蓖康,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铐炫,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蒜焊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倒信。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡山涡,死狀恐怖堤结,靈堂內(nèi)的尸體忽然破棺而出唆迁,到底是詐尸還是另有隱情鸭丛,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布唐责,位于F島的核電站鳞溉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鼠哥。R本人自食惡果不足惜熟菲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朴恳。 院中可真熱鬧抄罕,春花似錦、人聲如沸于颖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至做入,卻和暖如春冒晰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竟块。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工壶运, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪秘。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓蒋情,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親秫逝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恕出,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 構(gòu)建一個(gè)互聯(lián)網(wǎng)應(yīng)用,權(quán)限校驗(yàn)管理是很重要的安全措施违帆,這其中主要包含: 認(rèn)證 - 用戶身份識(shí)別浙巫,即登錄 授權(quán) - 訪...
    zhuke閱讀 3,505評(píng)論 0 30
  • 一、架構(gòu) 要學(xué)習(xí)如何使用Shiro必須先從它的架構(gòu)談起刷后,作為一款安全框架Shiro的設(shè)計(jì)相當(dāng)精妙的畴。Shiro的應(yīng)用...
    ITsupuerlady閱讀 3,533評(píng)論 4 32
  • 身份驗(yàn)證,即在應(yīng)用中誰(shuí)能證明他就是他本人尝胆。一般提供如他們的身份ID一些標(biāo)識(shí)信息來表明他就是他本人丧裁,如提供身份證,用...
    小孩真笨閱讀 533評(píng)論 0 0
  • 最近經(jīng)常在外出差含衔,說到出差可能會(huì)有那么一部分人會(huì)很羨慕煎娇,會(huì)想這些人真舒服,上班跟旅游似的贪染,全國(guó)各地到處跑缓呛,也有...
    chengang123456閱讀 425評(píng)論 0 0
  • 分別后的第六個(gè)秋天 你我相約濃情蜜意的老店 香濃的咖啡點(diǎn)擊了夢(mèng)境般的序言 不再有彼此相互依偎的繾綣 原來你我相距太...
    谷雨666閱讀 238評(píng)論 0 1