在測試過程中,我們經常會遇到介面資料加密、資料庫密碼加密怎麼測試等問題,很多同學立馬被嚇退了。
實際上,只要耐心一點,測試過程的常用加密演算法不是那麼難,甚至有的根本就不是加密演算法。
密碼學是一門相對比較晦澀的科學,電影《模仿遊戲》就是講的包括圖靈在內的幾個頂級數學家破譯德軍的軍事情報的故事。 但是在工作當中,我們不需要懂密碼學的底層原理,你只需要知道他們如何使用的就可以了。
本文會列舉在測試和開發過程中最常用的演算法,解開所謂「加密」過程的神秘面紗。
這不是加密演算法,它叫做編碼演算法。和我們把文字編碼成計算機當中的二進位制資料一樣。
說得更通俗一點。只要你觀察到i am a programer
這幾個字是英語,你就能通過翻譯軟體知道他的原始意思是 「我是乙個程式設計師」。
我們來看一段字串:
ssbsawtlihlvdq==
i like you
就和我們把中文翻譯成英文一樣, base64 這樣的編碼演算法只是把你看得懂的字翻譯成肉眼看不懂的字,但是一旦你知道這些看不懂的符號是哪一門語言,你就可以直接翻譯回去。
比如上一段ssbsawtlihlvdq==
就是用 base64 編碼i like you
得到的字。
import base64
# 開發人員編碼
byte_str = "i like you".encode('utf-8')
encode_str = base64.b64encode(byte_str)
print(encode_str) # 得到 ssbsawtlihlvdq==
# 解碼
decode_str = base64.b64decode("ssbsawtlihlvdq==")
print(decode_str.decode("utf-8")) # 得到 "i like you"
url 編碼, 和 base64 一樣,只是編碼演算法,不能稱為加密。 記住,編碼方式,只要你通過觀察看到的字串的特徵,分析出編碼方式,是可以很輕易的解碼的。
肉眼看不見具體意思,所以這也是防君子,不妨小人的所謂 「加密方式」。
比如:base64 的特徵是尾部經常帶有=
號, url 編碼的特徵是%
很多。
後半段帶有很多百分號的就是 url 編碼,你同樣可以通過搜尋對應的工具直接解碼,得到原始資料:
菜鳥對應的 python **是這樣的:
from urllib.parse import quote, unquote
q = '菜鳥'
# url 編碼, 得到
url = ''.format(quote(q))
# 解碼
b = unquote('%e8%8f%9c%e9%b8%9f') # 得到: 菜鳥
md5 不是編碼,也不是加密,它叫做摘要演算法,又稱雜湊演算法和雜湊演算法。 他的主要作用是:
import hashlib
hash = hashlib.md5()
# 明文密碼是 hello yuz
hash.update(b"hello yuz")
hash_str = hash.hexdigest()
# 得到資料:bfb3f4712d0b04e8348a3fb5fa0b9bc2
# 儲存到資料庫
注意:摘要演算法是不可逆的,通過 bfb3f4712d0b04e8348a3fb5fa0b9bc2 得不到原始資料 hello yuz 。所以通過存在資料庫裡面的密碼無法獲知你真正的密碼。
密碼被盜通常是因為黑客利用了摘要演算法的另乙個特性攻擊了資料庫,這種方式叫撞庫。
對於單一的摘要演算法,有乙個特徵:只要你的原始資料是固定的,得到的 hash 值也會一樣。比如 hello yuz 得到的就是 bfb3f4712d0b04e8348a3fb5fa0b9bc2 。黑客就是利用這種對應關係,將很多人常用的密碼和對應的 hash 值做成乙個關係表(彩虹表),然後一一去嘗試。
上面的例子提到,黑客可以利用彩虹表套取你的密碼,所以純粹的摘要演算法不是一種特別安全的方式去儲存密碼。但是我們可以採取「加鹽」 的方式提高安全性。
**開發者會提供乙個類似於秘鑰的東西,我們稱為 salt, 其實就是乙個隨便起的字串。然後將原始密碼 + salt 得到乙個新字串,再對他進行 hash。
只要 salt 不被黑客知道,就沒有辦法利用彩虹表來攻擊資料庫。以下是加鹽版的 python **:
salt = 'the salt'
pwd ='8888'
salt_pwd = pwd + salt
hash = hashlib.md5()
hash.update(salt_pwd.encode('utf-8'))
hash_str = hash.hexdigest()
在測試過程中,如果公司的密碼是通過摘要演算法生成的,可以找開發小哥哥要鹽, 然後通過對應的摘要演算法驗證資料庫密碼。
sha1 和 md5 一樣,也是摘要演算法,還有 sha256, sha512。 我們看到的區別就是長度不一樣。長度越長,理論上更加安全,同時也意味著速度更慢。
以下是 sha1 的**,和 md5 幾乎一樣:
s = hashlib.sha1()
s.update(b"hello yuz")
sha_str = s.hexdigest()
url 編碼常用於 url 資料的編碼和解析;
md5 是最經典,使用最廣泛的摘要演算法。
sha1, sha256, sha512 比 md5 安全性更高,但是速度更慢,同時儲存資料的時候耗費的資源會更多。
本文由檸檬班雨澤
753665853備註:csdn
css小白也能懂 1
css是級聯樣式表 cascading style sheets 級聯 關聯 即 兩個內容之間的關係 樣式表 css修飾網頁的語法集。優點 將頁面的內容與表現形式 css 分離達到可重複利用。html是網頁的內容,如 a img 表單 css控制頁面的外觀和樣式 為html控制外觀。若要對內容進行多...
小白也能懂 如何運營乙個內容專題?
之前發了一篇 關於內容專題,這有乙份從 0 到 1 的運營方案 被行外朋友吐槽好像很有用但專業名詞太多看不懂,只適合 還是有相關基礎 的童鞋看。於是衍生出了這一篇文章,旨在希望沒做過內容專題運營或者沒做過運營的朋友,靠著文章也能想象到運營乙個簡單的內容專題大概有什麼樣的畫面。乙個小內容專題,基本會有...
看完小白也能懂什麼是公有雲 私有雲 混合雲
近幾年隨著雲計算技術的逐漸普及,越來越多的企業開始選擇了部署雲計算方案,但是公有雲 私有雲 混合雲到底怎麼選,或者說它們各自具體有什麼區別,很多人是不了解的,針對不同需求的企業擁有不同部署方案,如果不了解的話,選型也會為難。今天我們深入淺出舉乙個例子,讓你通俗的明白什麼是公有雲 私有雲 混合雲和社群...