md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
生活随笔
收集整理的這篇文章主要介紹了
md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
點擊關注州的先生 精彩不容錯過
在實際編程開發中,我們會使用到各類的加密算法來對數據和信息進行加密。比如密碼中比較常見的MD5加密,以及AES加密等等。對于密碼認證來說,MD5加密是比較適合的,因為其不需要接觸到明文的數據,只需要比對MD5加密后的哈希值就能判斷數據是否一致;而對于一些在加密后進行解密的數據而言,AES則更加的常用。在Python中實現AES算法需要借助的第三方庫Crypto,其在各個操作系統上的安裝方法有些許復雜,所以對于簡單的使用有點殺雞用牛刀的意思。在Mrdoc的開發過程中,我們就遇到了這樣的問題。一方面不想為了一個小小的功能增加一個安裝容易出錯的第三方庫,一方面又有對用戶輸入的第三方密碼進行加密和解密的需求。最終,我們采用的Python內置的方法實現了。設置一個秘鑰
在這個秘鑰加解密方案中,我們需要設置一個秘鑰,用來對數據進行加密和解密。在Mrdoc中,我們借助Django項目中的SECRET_KEY變量來作為秘鑰。原則就是,盡量復雜且長: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)運行上述代碼,我們會得到如下圖所示的結果:
最后
可以發現,這個方法對于一般性的數據加解密而言,還是比較簡單和便捷的,唯一需要考量的是秘鑰的復雜性和安全性,如果有更好地實現方法,歡迎留言討論:)▼點擊“
萬水千山總是情,點個“在看”行不行▼?
總結
以上是生活随笔為你收集整理的md5加密解密代码_Python内置方法实现基于秘钥的信息加解密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java多线程中出现的异常分别有哪些_j
- 下一篇: java求1000内的水仙花数