您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關怎么在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)
運行上述代碼,我們會得到如下圖所示的結果:
四、最后
可以發現,這個方法對于一般性的數據加解密而言,還是比較簡單和便捷的,唯一需要考量的是秘鑰的復雜性和安全性,如果有更好地實現方法,歡迎留言討論:)
ps:Python利用字符串自帶函數實現加密和解密
字符串自帶的簡單加密
encode = str.maketrans('eilouvy','1234567')#加密方式 words = 'iloveyou' encode_words = words.translate(encode)#按encode加密方式加密 print(encode_words) #輸出23461745 dedoed = str.maketrans('1234567','eilouvy')#解密方式 dedoed_words = encode_words.translate(dedoed)#按decode解密方式解密 print(dedoed_words)#輸出iloveyou
1、云計算,典型應用OpenStack。2、WEB前端開發,眾多大型網站均為Python開發。3.人工智能應用,基于大數據分析和深度學習而發展出來的人工智能本質上已經無法離開python。4、系統運維工程項目,自動化運維的標配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數據分析。
上述就是小編為大家分享的怎么在Python中實現秘鑰加解密字符串了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。