DES
what?
對稱的加密算法
why?
如何保證安全性?
通過各種置換操作,對明文進行加密。
加解密效率高
加密秘鑰==解密密鑰
相對RSA來說如何不安全?
因為加密密鑰和解密密鑰相同,加密的安全性就依賴於密鑰的安全性,而在網絡交互過程中,環境復雜,密鑰的保密安全性難以保證。
how?
加密
des對64位的明文進行分組操作,通過一個初始置換,將明文分成左半部分&右半部分。然后進行16輪完全相同的運算(f),在運算過程中數據與密鑰結合,經過16輪后,左右半部分結合在一起,最后經過一個末置換(初始置換的逆置換),完成加密過程。
DES的運行模式
模式 | 描述 | 用途 |
---|---|---|
ECB | 每個明文獨立地以同一密鑰加密 | 傳送端數據(如一個加密密鑰) |
CBC | 加密算法的輸入時當前明文組與前一密文組的異或 | 傳送數據分組,認證 |
CFB | 每次只處理輸入的 比特,將上一次的密文用作加密算法的輸入以產生偽隨機輸出,改輸出再與當前明文異或以產生當前密文 | 傳送數據流,認證 |
OFB | 與CFB類似,不同再與本次加密算法的輸入為前一次加密算法的輸出 | 有擾信道上傳送數據流 |
代碼:
來源http://whitemans.ca/des.html
# encoding: utf-8
import pyDes
# For Python3, you'll need to use bytes, i.e.:
# data = b"Please encrypt my data"
# k = pyDes.des(b"DESCRYPT", pyDes.CBC, b"\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
data = "加密Please encrypt my data"
data = bytes(data,encoding='utf-8') #將utf8轉化為byte,注意加密的數據必須為byte
k = pyDes.des("DESCRYPT", pyDes.CBC, "\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
d = k.encrypt(data)
print("Encrypted: %r" % d)
print("Decrypted: %r" % k.decrypt(d))
assert k.decrypt(d) == data