md5加密解密程式碼_Python內建方法實現基於祕鑰的資訊加解密
阿新 • • 發佈:2020-12-18
技術標籤:md5加密解密程式碼md5解密程式碼python md5解密
點選關注州的先生 精彩不容錯過
在實際程式設計開發中,我們會使用到各類的加密演算法來對資料和資訊進行加密。 比如密碼中比較常見的MD5加密,以及AES加密等等。 對於密碼認證來說,MD5加密是比較適合的,因為其不需要接觸到明文的資料,只需要比對MD5加密後的雜湊值就能判斷資料是否一致; 而對於一些在加密後進行解密的資料而言,AES則更加的常用。 在Python中實現AES演算法需要藉助的第三方庫Crypto,其在各個作業系統上的安裝方法有些許複雜,所以對於簡單的使用有點殺雞用牛刀的意思。 在Mrdoc的開發過程中,我們就遇到了這樣的問題。 一方面不想為了一個小小的功能增加一個安裝容易出錯的第三方庫,一方面又有對使用者輸入的第三方密碼進行加密和解密的需求。 最終,我們採用的Python內建的方法實現了。設定一個祕鑰
key = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
接下來對資料的加密和解密,我們都需要使用到這個祕鑰。
對資料進行加密
我們的加密邏輯其實很簡單,核心是一個Python內建方法ord(),這個方法用於返回一個單位元組的ASCII碼字元的Unicode碼位。
加密邏輯步驟如下:
1、建立一個空字串變數,作為加密字元的初始值;
2、使用zip()方法同時遍歷資料字串和祕鑰;
3、使用ord()方法分別獲取遍歷的資料字元和祕鑰字元的Unicode碼位,並將其相加,得到此資料字元的加密字元;
4、將得到的加密字元追加到空字串變數中;
5、返回最終的空字串變數;
# 加密
def enctry(s):
k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
encry_str = ""
for i,j in zip(s,k):
# i為字元,j為祕鑰字元
temp = str(ord(i)+ord(j))+'_' # 加密字元 = 字元的Unicode碼 + 祕鑰的Unicode碼
encry_str = encry_str + temp
return encry_str
如果我們將字串”zmister”使用這個加密方法進行加密,最終會得到如下所示的加密字串:
'222_215_218_152_169_200_231_'
對資料進行解密
與加密的邏輯相反,我們需要把Unicode碼位還原為單位元組的ASCII碼字元,這需要利用到Python的內建方法chr()。所以資料解密的步驟如下所示:1、定義一個空的字串變數,作為解密資料的初始值;
2、使用zip()方法同時遍歷加密後的資料和祕鑰;
3、將加密資料字元減去祕鑰字元的Unicode碼位,得到原始資料的Unicode碼位,然後使用chr()方法將其還原為ASCII單位元組字元;
4、將得到的解密字元追加到空字串變數中;
5、返回解密字元
# 解密
def dectry(p):
k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
dec_str = ""
for i,j in zip(p.split("_")[:-1],k):
# i 為加密字元,j為祕鑰字元
temp = chr(int(i) - ord(j)) # 解密字元 = (加密Unicode碼字元 - 祕鑰字元的Unicode碼)的單位元組字元
dec_str = dec_str+temp
return dec_str
這樣,我們就能把加密的資料解密出來。
我們用一個完整的程式碼來測試一下:
# coding:utf-8
# @檔案: utils.py
# @建立者:州的先生
# #日期:2019/12/8
# 部落格地址:zmister.com
# 加密
def enctry(s):
k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
encry_str = ""
for i,j in zip(s,k):
# i為字元,j為祕鑰字元
temp = str(ord(i)+ord(j))+'_' # 加密字元 = 字元的Unicode碼 + 祕鑰的Unicode碼
encry_str = encry_str + temp
return encry_str
# 解密
def dectry(p):
k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
dec_str = ""
for i,j in zip(p.split("_")[:-1],k):
# i 為加密字元,j為祕鑰字元
temp = chr(int(i) - ord(j)) # 解密字元 = (加密Unicode碼字元 - 祕鑰字元的Unicode碼)的單位元組字元
dec_str = dec_str+temp
return dec_str
data = "zmister.com"
print("原始資料為:",data)
enc_str = enctry(data)
print("加密資料為:",enc_str)
dec_str = dectry(enc_str)
print("解密資料為:",dec_str)
執行上述程式碼,我們會得到如下圖所示的結果:
最後
可以發現,這個方法對於一般性的資料加解密而言,還是比較簡單和便捷的,唯一需要考量的是祕鑰的複雜性和安全性,如果有更好地實現方法,歡迎留言討論:)▼點選“
萬水千山總是情,點個“在看”行不行▼