主題:雜亂大全03-資安與加密的那些事(1):MD5、SHA、Bcrypt
前言:本篇開始將連續幾篇講述基礎的加密與資訊安全,並針對PHP、Python、C#來進行實作
叮嚀:
$
代表對CMD或terminal(終端機)下指令
tags: php
,encrypt
,Bcrypt
,AES
本篇重點:
- 簡介常見的加密手法
- 自身的實作經驗
常見的hash
1.MD5
2.Sha系列
3.Haval系列
4.Bcrypt
5.PBKDF2
6.Scrypt
當然還有很多,但是主要以最常使用的為主
在某些領域中,會將hash和加密分開討論
(本篇只先介紹MD5、SHA、Bcrypt)
在PHP中可使用hash_algos()來查看hash演算法
1 | <?php |
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 | <?php |
以下為SHA與MD5之比對表:
非常推薦的hash-Bcrypt
目前PHP7以上都使用此方法來進行hash密碼
使用方法也極為簡單
但是效果卻特別的好
Bcrypt 是根據Blowfish加密演算法所設計
對文本進行加鹽加密
並且能夠防禦暴力破解與彩虹表攻擊
- Bcrypt簡介:
https://zh.wikipedia.org/wiki/Bcrypt
使用上也相當的簡單,直接呼叫即可:
1 | <?php |
特別的是
每一次hash執行結果都不一樣
因此需要使用 password_verify 函式進行驗證
1 | <?php |
小結語:
使用hash的話,會比較推薦Bcrypt以及下篇要介紹的PBKDF2
後續:
在下一篇會以Python、PHP、C#實作AES
參考連結
Blowfish-bcrypt–SSH
https://zh.wikipedia.org/wiki/BlowfishSSL/TLS的二三事:
https://reurl.cc/MvWAKKSSL、TLS:
https://www.websecurity.digicert.com/zh/hk/security-topics/what-is-ssl-tls-https對稱密鑰加密—AES
https://reurl.cc/0okjAA公開金鑰加密(非對稱式密碼學)–RSA
https://reurl.cc/9E0reOSSL證書(https)中的非對稱加密與對稱加密
https://kknews.cc/zh-tw/code/gzbkyg8.html
- Does BCrypt uses AES 448bit encryption?
https://stackoverflow.com/questions/30028499/does-bcrypt-uses-aes-448bit-encryption
<追隨前輩們的腳步,不停往前。>
- 任何問題,請聯繫我:
liao86221@gmail.com