Shiro 認證憑據 密碼 加密的那些事

2021-08-30 13:34:47 字數 1991 閱讀 1323

一般來說,實際專案中隱私資料沒有在網路上明文跑路,都會採用不同的加密演算法。shiro中的認證憑據通常也會採用演算法進行加密。

該介面只有乙個方法,docredentialsmatch,就是用來進行密碼比較的!

原始碼如下:

public inte***ce credentialsmatcher  if the provided token credentials match the stored account credentials,

* otherwise.

** @param token the submitted during the authentication attempt

* @param info the stored in the system.

* @return if the provided token credentials match the stored account credentials,

* otherwise.

*/boolean docredentialsmatch(authenticationtoken token, authenticationinfo info);

}

其實現類如下:

裡面可以看到我們常用的md5演算法和sha-x演算法。

其中md5credentialsmatcher 和sha1credentialsmatcher 標註已經過時,通常我們會直接在容器中註冊hashedcredentialsmatcher來使用!

如這裡我們註冊hashedcredentialsmatcher並指定演算法為md5,xml配置如下:

使用中的配置情況下,如果兩個人的原始密碼一樣,那麼其加密後的密碼也相同,同樣存在風險。

在hashedcredentialsmatcher中有這樣乙個方法:

protected hash hashprovidedcredentials(object credentials, object salt, int ha****erations)
其中new ******hash(hashalgorithmname, credentials, salt, ha****erations)就是根據提供的原始憑據,加密演算法,鹽值和加密次數進行加密並返回加密後的結果。鹽值是乙個唯一字串,這裡你可以使用loginname作為加密鹽值。

步驟如下:

如果使用鹽值加密,我們的dogetauthenticationinfo修改如下:

@override

protected authenticationinfo dogetauthenticationinfo(

authenticationtoken authenticationtoken) throws authenticationexception

if (user.getstatus()==null||user.getstatus()==0)

//其他異常...

//返回authenticationinfo的實現類******authenticationinfo

// return new ******authenticationinfo(user, user.getpassword(), this.getname());

//鹽值加密

bytesource credentialssalt = bytesource.util.bytes(loginname);

return new ******authenticationinfo(user, user.getpassword(), credentialssalt, this.getname());

}

Shiro 4 Shiro密碼加密

userrealm class cn.qecode.realm.userrealm name credentialsmatcher class org.apache.shiro.authc.credential.hashedcredentialsmatcher name hashalgorithmn...

Shiro 之一 密碼加密

在專案前期開發階段,密碼採用明碼儲存。但是一旦程式部署在生產環境,明碼儲存密碼是非常不安全的,必須對密碼進行加密運算。加密主要分為兩種 可逆運算和不可逆運算 1 可逆運算是通過乙個秘鑰,對一段字串加密,同樣可以通過這個秘鑰進行解密運算 2 不可逆運算的加密對一段字串進行加密,但是不能還原成原來的字串...

shiro認證2 md5密碼的比對(六)

1.為什麼使用 md5 鹽值加密 2.如何做到 1 在 dogetauthenticationinfo 方法返回值建立 authenticationinfo 物件的時候,需要使用 authenticationinfo principal,credentials,credentialssalt,rea...