iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
自我挑戰組

一個月的演算法挑戰系列 第 21

Day21:安全性和演算法-共用金鑰密碼系統(shared-key crypto system)

前言

前一天我們有稍微提到安全性演算法的其中一個,也就是今天的主題「共同金鑰密碼系統」(shared-key crypto system),其實筆者對於密碼學一直有很濃厚的興趣,但非相關科系出身,也是在轉職的路上才接觸到密碼學,今天就讓我們來聊聊相關的議題吧!

在開始今天主題之前,先來想想,生活中會在哪裡使用到密碼,換句話說,在明文傳輸過程中,會產生什麼樣的風險?


共用金鑰密碼系統(shared-key crypto system)

共用金鑰密碼系統(shared-key crypto system)又稱為「對稱密鑰演算法」(Symmetric-key algorithm),是因為在加密與解密的過程中使用同一把共同金鑰。

加密(Encryption):將明文內容改變為無法讀取的內容,要利用「key」才能解讀資料。
解密(Descryption):將加密過後的訊息內容,利用「key」還原為明文內容。

明文傳輸的過程中,有些機密訊息若是被有心人士利用,會造成無法想像的後果,例如:密碼。試想,當網站要求使用者輸入密碼時,輸入的密碼可以被所有人看到,那麼密碼保護的資料,就顯得沒有意義了。再更一進步的說,使用者下單購買商品時,傳輸的過程中,讓有心人士篡改了訂單資料,那麼交易也就無法順利進行,網站的安全性也會被質疑,基於上述種種情形,我們需要使用不同的密碼系統進行資料保護。

接下來看看,什麼是Shared-key crypto system,在資料傳輸過程中,使用同一把「key」進行加密與解密,香當然缺點就是,若有人拿到這把鑰匙,就可以解讀加密過後的資料,這也是採用此方法時,需要考慮的地方。


使用Python加密、解密字串

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

使用JavaScript加密、解密字串

使用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


上一篇
Day20:安全性和演算法-雜湊函數(hash function)
下一篇
Day22:安全性和演算法-公開金鑰密碼系統(Public-key Cryptosystem)
系列文
一個月的演算法挑戰30

尚未有邦友留言

立即登入留言