最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何基于Security框架兼容多套用戶密碼加密方式

2023-03-21 08:48 作者:bili_34754408508  | 我要投稿


一、說明

當已上線的系統(tǒng)存在使用其他的加密方式加密的密碼數(shù)據(jù),并且密碼?不可逆?時,而新的數(shù)據(jù)采用了其他的加密方式,則需要同時兼容多種加密方式的密碼校驗。

例如下列幾種情況:

  1. 舊系統(tǒng)用戶的密碼采用了?MD5?的加密方式,而升級框架后的新系統(tǒng)則采用?BCrypt?的加密方式;

  2. 當割接歷史數(shù)據(jù)后會存在用戶表中密碼的?加密方式不統(tǒng)一?的問題,歷史數(shù)據(jù)為?MD5?新數(shù)據(jù)為?BCrypt;

  3. 所以需要系統(tǒng)支持同時兼容多種加密方式的密碼校驗。

本文分享基于Security的PasswordEncoder來實現(xiàn)兼容多套用戶密碼加密方式。

?

二、DelegatingPasswordEncoder

在 spring Security 5.0之后,默認的密碼加密方案其實是?DelegatingPasswordEncoder?它是一個代理類,而并非一種全新的密碼加密方案,可以用來代理多種不同的密碼加密方案。

??代碼參考

Map<String, PasswordEncoder> encoders = new HashMap<>(); encoders.put("bcrypt", new BCryptPasswordEncoder()); encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder()); encoders.put("MD4", new org.springframework.security.crypto.password.Md4PasswordEncoder()); encoders.put("MD5", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5")); encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance()); encoders.put("pbkdf2", new Pbkdf2PasswordEncoder()); encoders.put("scrypt", new SCryptPasswordEncoder()); encoders.put("SHA-1", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-1")); encoders.put("SHA-256", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256")); encoders.put("sha256", new org.springframework.security.crypto.password.StandardPasswordEncoder()); encoders.put("argon2", new Argon2PasswordEncoder()); encoders.put("SM3", new SM3PasswordEncoder()); Assert.isTrue(encoders.containsKey(encodingId), encodingId + " is not found in idToPasswordEncoder"); DelegatingPasswordEncoder delegatingPasswordEncoder = new DelegatingPasswordEncoder(encodingId, encoders); delegatingPasswordEncoder.setDefaultPasswordEncoderForMatches(encoders.get(encodingId));return delegatingPasswordEncoder;

自動會根據(jù)數(shù)據(jù)的?encodingId?來使用對應的編譯器處理密碼

?

三、如何使用

3.1. 修改歷史密碼數(shù)據(jù)

修改舊的密碼數(shù)據(jù)的值,添加前綴標識?encodingId?格式如下:

  • 無鹽值

{encodingId}密碼 例如源密碼為:$2a$10$EgTOU7PMe.3jaMwFsumdweJcnY3TsTqyuJEdSaSKxdgwYchAwUJ1C 則修改為:{bcrypt}$2a$10$EgTOU7PMe.3jaMwFsumdweJcnY3TsTqyuJEdSaSKxdgwYchAwUJ1C

  • 有鹽值

{encodingId}{salt}密碼 例如源密碼為: 0758f7131c6c95c8e3df05e1ac50214c 則修改為: {MD5}{5Hstj}0758f7131c6c95c8e3df05e1ac50214c

encodingId 的值可參考?PwdEncoderUtil?類

如下圖所示:

3條記錄中,前兩條為原有的歷史記錄使用的是?MD5?的加密算法,然后新插入的數(shù)據(jù)使用的為?bcrypt?的加密算法,分別使用不同的前綴標識?encodingId

?

3.2. 配置 PasswordEncoder 對象

使用?DelegatingPasswordEncoder?類來定義?PasswordEncoder?并且指定默認加密方式為?bcrypt

@Beanpublic PasswordEncoder passwordEncoder() { ? return PwdEncoderUtil.getDelegatingPasswordEncoder("bcrypt"); }

以下兩種情況下都是使用默認的加密方式:

  1. 使用 encode 方法加密數(shù)據(jù)。

  2. 使用 matches 方法對比密文和原文時,密文沒有 encodingId 標識。

更多學習資料盡在有軟官網(wǎng)

https://www.jiaruvip.com
https://www.jiaruvip.com/software
https://www.jiaruvip.com/hacker
https://www.jiaruvip.com/phone
https://www.jiaruvip.com/game
https://www.jiaruvip.com/technical
https://www.jiaruvip.com/news
https://www.jiaruvip.com/author


如何基于Security框架兼容多套用戶密碼加密方式的評論 (共 條)

分享到微博請遵守國家法律
闽清县| 金秀| 靖州| 焦作市| 金阳县| 白玉县| 佛教| 湖南省| 花莲县| 海林市| 渭南市| 喀什市| 洪江市| 冀州市| 西充县| 抚远县| 民权县| 塔城市| 寻乌县| 盐津县| 彩票| 鄂托克前旗| 棋牌| 富蕴县| 东乌珠穆沁旗| 巨野县| 马山县| 三台县| 衡阳市| 中山市| 正安县| 大邑县| 墨竹工卡县| 民和| 筠连县| 都江堰市| 临洮县| 通渭县| 广河县| 名山县| 秦皇岛市|