主題:雜亂大全05-資安與加密的那些事(3):AES實作與應用
前言:接續前幾篇,本篇簡介對稱金鑰加密後將講解AES實際應用情形
叮嚀:
$
代表對CMD或terminal(終端機)下指令
tags: php
,encrypt
,AES
本篇重點:
- 簡介對稱金鑰加密、AES
- 實作經驗
對稱金鑰加密
白話來說:就是使用同一把鑰匙進行加密與解密,因此會有如何傳遞金鑰的問題
圖解(引用書本:演算法圖鑑):
AES簡介
進階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。(節錄)
AES簡介:
https://en.wikipedia.org/wiki/Advanced_Encryption_Standard目前被推薦的長度至少256位元
AES的參數(預設是Rijndael)
- key length(密鑰位數)
- key (密鑰)
- IV (向量)
- mode (加密模式)
- padding (填充方式)
實際應用於WebSocket溝通
本次參考與國家地震中心雙方交談時使用的AES加密方式
(均可從網站找到溝通方式)
以下提供官方範例文件(使用C#):
1 |
|
利用上述範例,使用因本專案是使用python
故以下用python進行與官方的websocket溝通
解析整體步驟:
STEP(padding->CBC加密->base64編碼)
- key=bytearray(passwd)+text=bytearray(passwd)
- RijndaelManaged rijndaelCipher = new
RijndaelManaged(); (##rijn)- IV=MD5(key)
- key=sha256(key)
- aes.Mode = CipherMode.CBC;
- aes.Padding = PaddingMode.PKCS7;
- import base64
base64.b64encode(bytes(‘your string’, ‘utf-8’))
範例:
1 | from websocket import create_connection |
補充:
因為各個語言C#、PHP、Python
在AES參數寫法上有一些不同,所以文件要寫好
確定好在各參數上都能一致
上述寫法是應雙方文件都使用此類參數
小結語:
AES的使用相較簡單且安全,可以選擇來使用
後續:
下篇將介紹對稱金鑰加密,簡介使用RSA建立加密
參考連結
AES參數使用
https://www.itmangoto.cn/2018/06/30/aes-key-mode-iv-padding/對稱加密vs非對稱加密
https://academy.binance.com/zt/security/symmetric-vs-asymmetric-encryption
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