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


<<:  Day6 CR和XR好像根本就是MR?

>>:  Day 21 实作路径结构

第 23 集:Bootstrap 客制化 Grid 格线系统

此篇会教学如何将 Bootstrap grid 格线系统,自干一个出来。 事前准备 Gird Sy...

Day_22: 让 Vite 来开启你的Vue 之 跨元件响应式资料的处理

Hi Dai Gei Ho~ 我是 Winnie ~ 在今天文章中,我们要来继续延伸 昨天文章的主题...

Day15 对 VMA 上下其手

前言 昨天将 VMA结构检视了一遍,也大概了解vma_area_struct 与 mm_struct...

D26 / 要怎麽放 Compose 进我的专案? - Compose View

今天大概会聊到的范围 ComposeView 之前有介绍过 Compose 中的 AndroidV...

Consistency and Consensus (4-2) - Fault-Tolerant Consensus

续 Day 20 Fault-Tolerant Consensus 共识问题通常可以公式化成:一个...