雜亂大全03-資安與加密的那些事(1):MD5、SHA、Bcrypt

  • 主題:雜亂大全03-資安與加密的那些事(1):MD5、SHA、Bcrypt

  • 前言:本篇開始將連續幾篇講述基礎的加密與資訊安全,並針對PHP、Python、C#來進行實作

  • 叮嚀: $ 代表對CMD或terminal(終端機)下指令

tags: php,encrypt,Bcrypt,AES

本篇重點:

  1. 簡介常見的加密手法
  2. 自身的實作經驗

常見的hash

1.MD5
2.Sha系列
3.Haval系列
4.Bcrypt
5.PBKDF2
6.Scrypt
當然還有很多,但是主要以最常使用的為主
在某些領域中,會將hash和加密分開討論
(本篇只先介紹MD5、SHA、Bcrypt)

在PHP中可使用hash_algos()來查看hash演算法

1
2
3
<?php
print_r(hash_algos());
?>

Array
(
[0] => md2
[1] => md4
[2] => md5
[3] => sha1
[4] => sha224
[5] => sha256
[6] => sha384
[7] => sha512
[8] => ripemd128
[9] => ripemd160
[10] => ripemd256
[11] => ripemd320
[12] => whirlpool
[13] => tiger128,3
[14] => tiger160,3
[15] => tiger192,3
[16] => tiger128,4
[17] => tiger160,4
[18] => tiger192,4
[19] => snefru
[20] => snefru256
[21] => gost
[22] => gost-crypto
[23] => adler32
[24] => crc32
[25] => crc32b
[26] => fnv132
[27] => fnv1a32
[28] => fnv164
[29] => fnv1a64
[30] => joaat
[31] => haval128,3
[32] => haval160,3
[33] => haval192,3
[34] => haval224,3
[35] => haval256,3
[36] => haval128,4
[37] => haval160,4
[38] => haval192,4
[39] => haval224,4
[40] => haval256,4
[41] => haval128,5
[42] => haval160,5
[43] => haval192,5
[44] => haval224,5
[45] => haval256,5
)



最不能使用的-MD5

MD5屬於早期相當常使用的hash方式
用來成為文本摘要判斷文本是否被竄改
也用於hash密碼的方法,來儲存或是傳送資料

那為何不能再使用呢?
因為可以暴力破解出答案

1996年發現MD5存在弱點
且隨著硬體的進步很快能破解出MD5
故最好別再使用

在PHP中相當簡單使用,直接呼叫即可
md5 ( string $str [, bool $raw_output = FALSE ] ) : string



最常用的SHA系列

SHA-0:1993年發布
SHA-1:1995年發布
SHA-2:2001年發布,
包括SHA-224、256、384、512、512/224、512/256。

SHA-3:2015年正式發布
SHA-3目前並未大規模取代SHA-2
因為SHA-2目前沒有出現明顯的弱點。

重要:最好使用SHA-256以上
目前建議使用SHA-2中的256、384、512

使用上也相當的簡單,直接代入即可:

1
2
3
<?php
echo hash('sha256', 'abc');
?>

以下為SHA與MD5之比對表:
image



非常推薦的hash-Bcrypt

目前PHP7以上都使用此方法來進行hash密碼
使用方法也極為簡單
但是效果卻特別的好

Bcrypt 是根據Blowfish加密演算法所設計
對文本進行加鹽加密
並且能夠防禦暴力破解與彩虹表攻擊

使用上也相當的簡單,直接呼叫即可:

1
2
3
4
<?php
$password = '123456';
var_dump(password_hash($password, PASSWORD_DEFAULT));
?>

特別的是
每一次hash執行結果都不一樣
因此需要使用 password_verify 函式進行驗證

1
2
3
<?php
var_dump(password_verify($password, $hash));
?>


小結語:

使用hash的話,會比較推薦Bcrypt以及下篇要介紹的PBKDF2


後續:

在下一篇會以Python、PHP、C#實作AES


參考連結


<追隨前輩們的腳步,不停往前。>

  • 任何問題,請聯繫我:liao86221@gmail.com