Day22 跟着官方文件学习Laravel-Hash

今天要来讲的是 Hash,与前面的加密不同,以上是我了解後整理出 Hash 的特点。

  1. Hash 是不可逆的。
  2. Hash 演算法运算完的输出是固定长度
  3. 相同的内容经 Hash 演算法,得到的输出必定一样。
  4. 不同的内容经 Hash 演算法,得到相同输出的机率非常低。
    上述说非常低,表示有可能会有两个不同的输入,得到相同的输出,这个称之为杂凑碰撞。

而laravel官方使用 Bcrypt 和 Argon2 散列来存密码,预设是 Bcrypt。

Bcrypt 在Hash中是很好的选择,因为他有 Level 可以调整,在你的 Level 愈高,生成Hash时间就愈长,这个时间长度愈长是好的,这样在黑客在生成彩虹表的时间就愈长,能更有效防止攻击。

因此我们可以来看看这个时间的差异

$start_time = date("H")*3600+date("i")*60+date("s");

        $hashed = Hash::make('password', [
            'rounds' => 18,
        ]);

        $end_time = date("H")*3600+date("i")*60+date("s"); 
        $time_total = $end_time - $start_time;
        echo "执行了:".$time_total."秒";

算一下他的时间,愈下面的时间 rounds 愈大,最下面的 rounds 为18,需要花13秒的时间计算

好,那我们来回顾一下之前我们如何储存密码到资料库中的

User::create([
            'account' => $account,
            'password' => Hash::make($password),
            'name' => Crypt::encryptString($username),
        ]);

一样是使用 Hash::make 来散列密码,而如何确认输入的密码与资料库相同呢,是利用

Hash::check($password, $user->password)

这样就能知道是否一致,若一致则回传 true,好,今天的Hash就研究到这边。


<<:  Day20 - 【概念篇】OAuth flows: Device Code(2)

>>:  Day24 UDP Swift小实作2!

[Day 2]餐前面包-事前工具准备

俗话说的好-工欲善其事,必先利其器 工程师们经过一代又一代的後浪推前浪,前浪死滩上之後 各种文字编辑...

[day-15] 认识Python的资料结构!(Part .2)

认识串列(List)   所谓的 串列(List) ,就是一串资料,是一种 具有弹性的资料结构 ,资...

【Day2】应用上大致的规划

这节内容就是应用大致的规划,使用的技术栈以及後台开发环境建立 1. 应用大致的规划 2. 使用的技术...

D17- 用 Swift 和公开资讯,打造投资理财的 Apps { 移动平均线(MA线)分析 }

做完 K 线完成後,就是做均线,常见大盘走势图如下,在这些 K 棒的图上,通常会有数条(通常三条)线...

[Day 29] Banana in a box!在那糖衣的背後

昨天介绍了自制 two-way binding 的方式,今天要接着看在背後 Angular 为我们做...