SpringSecurity-12-PasswordEncoder密码加密简介

SpringSecurity-12-PasswordEncoder密码加密简介

为什么密码加密?

国内的每一个开发社区在2011年发生过被黑客攻击,盗取用户信息,600多万的明文密码信息被盗取,大量用户面临着数据隐私泄露和数据安全的威胁。这警告了我们,一旦被黑客攻击用户账号信息被盗,我们该如何减少用户的损失,在我们开发者角度来看就是如何使得用户的账号密码变得安全。怎么让用户的密码变得安全呢?那就是要对用户的密码存储进行加密。

MD5加密

MD5信息摘要算法,是一种密码散列函数,可以生成一个128(16字节)的散列值,用于保证信息传输的一致性。但是MD5加密是不安全的,现在可以很轻松进行解密。举例说明不安全性。

  • 在mysql控制台输入md5的加密,sql如下
SELECT MD5(123456)

密码加密后数据

  • 通过MD5加密以后,我们随便找一个MD5解密的网站例如https://www.cmd5.com/,输入加密后的密码进行解密后就可以得到原始密码

SpringSecurity的PasswordEncoder

SpringSecurity内置的密码加密机制,使用的时候只需要PasswordEncode接口即可

public interface PasswordEncoder {
 String encode(CharSequence rawPassword);
 boolean matches(CharSequence rawPassword, String encodedPassword);
 default boolean upgradeEncoding(String encodedPassword) {
  return false;
 }

}

PasswordEncoder接口有三个方法:

  • String encode(CharSequence rawPassword)一般在用户注册和修改密码的时候使用

    • rawPassword参数表示的是原始密码
    • 输出的String类型数据是加密后的不可被逆向的hash值
  • boolean matches(CharSequence rawPassword, String encodedPassword)用于校验输入密码和加密和的密码是否匹配

  • boolean upgradeEncoding(String encodedPassword)方法用意是在判断密码是否需要重新加密?true表示需要,false表示不需要。

SpringSecurity的加密实现

SpringSecurity的加密实现实际上就是去实现PasswordEncoder,具体实现有如下

我们一般使用BCryptPasswordEncoder进行密码加密,它是一种盐加密(不了解盐加密的可以自行百度),我们测试以下盐加密和MD5加密有何不同,具体代码如下

@SpringBootTest
class SpringSecurityLearn8ApplicationTests {

    @Test
    void contextLoads() {

        String md5_one = DigestUtils.md5DigestAsHex("123456".getBytes());
        String md5_two = DigestUtils.md5DigestAsHex("123456".getBytes());

        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        String password_one = encoder.encode("123456");
        String password_two = encoder.encode("123456");
        System.out.println("md5_one: " + md5_one);
        System.out.println("md5_two: " + md5_two);
        System.out.println("password_one: " + password_one);
        System.out.println("password_two: " + password_two);
    }

}

控制台输出结果如下,我们发现MD5加密两次加密结果一样,因此很容易就可以进行解密,但是BCryptPasswordEncoder的两次加密的结果不一样,因此是不可逆加密。

md5_one: e10adc3949ba59abbe56e057f20f883e
md5_two: e10adc3949ba59abbe56e057f20f883e
password_one: $2a$10$tB9sjNF3ktIIzg9PQ8CaduauX3rRh7zsFADesQl2oXvmZ150xKZGS
password_two: $2a$10$c1vMF3CVEw1ggwpPrH9KD.qq2mw2GVW8Tnq5f7XsC/6X6a67yTJjS

这就是BCryptPasswordEncoder加密的特性,每次加密产生一个随机盐,然后每次加密产生不同结果。

Bcrypt有四个变量:

  • saltRounds:正数,表示哈希杂凑次数,数值越高越安全,默认10次
  • password:明文密码
  • slat:盐,一个128bits的随机字符串,长度为22字符
  • hash:精美Bcrypt加密的哈希结果

Bcrypt加密后的密码三部分,使用$分割:

  • $2a表示Bcrypt算法
  • 10表示哈希杂凑次数
  • tB9sjNF3ktIIzg9PQ8Cadu表示随机生成的盐

如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!

关注公众号 springboot葵花宝典 我将持续更新,并且获取我搜集的spingboot资料,谢谢!

原创不易,转载请注明出处,感谢支持!如果本文对您有用,欢迎转发分享!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容