新聞中心
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)怎么在Python中實現(xiàn)秘鑰加解密字符串,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
一、設(shè)置一個秘鑰
在這個秘鑰加解密方案中,我們需要設(shè)置一個秘鑰,用來對數(shù)據(jù)進行加密和解密。在Mrdoc中,我們借助Django項目中的SECRET_KEY變量來作為秘鑰。原則就是,盡量復(fù)雜且長:
key = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
接下來對數(shù)據(jù)的加密和解密,我們都需要使用到這個秘鑰。
二、對數(shù)據(jù)進行加密
我們的加密邏輯其實很簡單,核心是一個Python內(nèi)置方法ord(),這個方法用于返回一個單字節(jié)的ASCII碼字符的Unicode碼位。加密邏輯步驟如下:
1、創(chuàng)建一個空字符串變量,作為加密字符的初始值;
2、使用zip()方法同時遍歷數(shù)據(jù)字符串和秘鑰;
3、使用ord()方法分別獲取遍歷的數(shù)據(jù)字符和秘鑰字符的Unicode碼位,并將其相加,得到此數(shù)據(jù)字符的加密字符;
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_'
三、對數(shù)據(jù)進行解密
與加密的邏輯相反,我們需要把Unicode碼位還原為單字節(jié)的ASCII碼字符,這需要利用到Python的內(nèi)置方法chr()。所以數(shù)據(jù)解密的步驟如下所示:
1、定義一個空的字符串變量,作為解密數(shù)據(jù)的初始值;
2、使用zip()方法同時遍歷加密后的數(shù)據(jù)和秘鑰;
3、將加密數(shù)據(jù)字符減去秘鑰字符的Unicode碼位,得到原始數(shù)據(jù)的Unicode碼位,然后使用chr()方法將其還原為ASCII單字節(jié)字符;
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碼)的單字節(jié)字符 dec_str = dec_str+temp return dec_str
這樣,我們就能把加密的數(shù)據(jù)解密出來。我們用一個完整的代碼來測試一下:
# coding:utf-8 # @文件: utils.py # @創(chuàng)建者:州的先生 # #日期: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碼)的單字節(jié)字符 dec_str = dec_str+temp return dec_str data = "zmister.com" print("原始數(shù)據(jù)為:",data) enc_str = enctry(data) print("加密數(shù)據(jù)為:",enc_str) dec_str = dectry(enc_str) print("解密數(shù)據(jù)為:",dec_str)
運行上述代碼,我們會得到如下圖所示的結(jié)果:
四、最后
可以發(fā)現(xiàn),這個方法對于一般性的數(shù)據(jù)加解密而言,還是比較簡單和便捷的,唯一需要考量的是秘鑰的復(fù)雜性和安全性,如果有更好地實現(xiàn)方法,歡迎留言討論:)
ps:Python利用字符串自帶函數(shù)實現(xiàn)加密和解密
字符串自帶的簡單加密
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
python主要應(yīng)用領(lǐng)域有哪些
1、云計算,典型應(yīng)用OpenStack。2、WEB前端開發(fā),眾多大型網(wǎng)站均為Python開發(fā)。3.人工智能應(yīng)用,基于大數(shù)據(jù)分析和深度學(xué)習(xí)而發(fā)展出來的人工智能本質(zhì)上已經(jīng)無法離開python。4、系統(tǒng)運維工程項目,自動化運維的標(biāo)配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數(shù)據(jù)分析。
上述就是小編為大家分享的怎么在Python中實現(xiàn)秘鑰加解密字符串了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞標(biāo)題:怎么在Python中實現(xiàn)秘鑰加解密字符串-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://fisionsoft.com.cn/article/hsohi.html