前一天我們有稍微提到安全性演算法的其中一個,也就是今天的主題「共同金鑰密碼系統」(shared-key crypto system),其實筆者對於密碼學一直有很濃厚的興趣,但非相關科系出身,也是在轉職的路上才接觸到密碼學,今天就讓我們來聊聊相關的議題吧!
在開始今天主題之前,先來想想,生活中會在哪裡使用到密碼,換句話說,在明文傳輸過程中,會產生什麼樣的風險?
共用金鑰密碼系統(shared-key crypto system)又稱為「對稱密鑰演算法」(Symmetric-key algorithm),是因為在加密與解密的過程中使用同一把共同金鑰。
加密(Encryption):將明文內容改變為無法讀取的內容,要利用「key」才能解讀資料。
解密(Descryption):將加密過後的訊息內容,利用「key」還原為明文內容。
明文傳輸的過程中,有些機密訊息若是被有心人士利用,會造成無法想像的後果,例如:密碼。試想,當網站要求使用者輸入密碼時,輸入的密碼可以被所有人看到,那麼密碼保護的資料,就顯得沒有意義了。再更一進步的說,使用者下單購買商品時,傳輸的過程中,讓有心人士篡改了訂單資料,那麼交易也就無法順利進行,網站的安全性也會被質疑,基於上述種種情形,我們需要使用不同的密碼系統進行資料保護。
接下來看看,什麼是Shared-key crypto system,在資料傳輸過程中,使用同一把「key」進行加密與解密,香當然缺點就是,若有人拿到這把鑰匙,就可以解讀加密過後的資料,這也是採用此方法時,需要考慮的地方。
cryptocode要手動安裝:pip3 install cryptocode
import cryptocode
# 加密
str_encoded = cryptocode.encrypt("I am okay","wow")
# 解密
str_decoded = cryptocode.decrypt(str_encoded, "wow")
print(str_decoded)
輸出:
I am okay
使用AES高階加密標準(Advanced Encryption Standard)為範例:
JS中會使用到crypto-js庫
var CryptoJS = require('crypto-js');
var data = { id: 1, text: 'Hello World' };
// 加密
var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret_key_123').toString();
// 解密
var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret_key_123');
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
參考資料:https://www.gushiciku.cn/pl/pAWK/zh-tw