最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python內(nèi)置方法實(shí)現(xiàn)字符串的秘鑰加解密(推薦)

 更新時間:2019年12月09日 10:10:14   作者:州的先生  
在Python中實(shí)現(xiàn)AES算法需要借助的第三方庫Crypto,其在各個操作系統(tǒng)上的安裝方法有些許復(fù)雜,所以對于簡單的使用有點(diǎn)殺雞用牛刀的意思。這篇文章主要介紹了利用Python內(nèi)置方法實(shí)現(xiàn)字符串的秘鑰加解密,需要的朋友可以參考下

在實(shí)際編程開發(fā)中,我們會使用到各類的加密算法來對數(shù)據(jù)和信息進(jìn)行加密。比如密碼中比較常見的MD5加密,以及AES加密等等。

對于密碼認(rèn)證來說,MD5加密是比較適合的,因?yàn)槠洳恍枰佑|到明文的數(shù)據(jù),只需要比對MD5加密后的哈希值就能判斷數(shù)據(jù)是否一致;而對于一些在加密后進(jìn)行解密的數(shù)據(jù)而言,AES則更加的常用。

在Python中實(shí)現(xiàn)AES算法需要借助的第三方庫Crypto,其在各個操作系統(tǒng)上的安裝方法有些許復(fù)雜,所以對于簡單的使用有點(diǎn)殺雞用牛刀的意思。在Mrdoc的開發(fā)過程中,我們就遇到了這樣的問題。一方面不想為了一個小小的功能增加一個安裝容易出錯的第三方庫,一方面又有對用戶輸入的第三方密碼進(jìn)行加密和解密的需求。最終,我們采用的Python內(nèi)置的方法實(shí)現(xiàn)了。

一、設(shè)置一個秘鑰

在這個秘鑰加解密方案中,我們需要設(shè)置一個秘鑰,用來對數(shù)據(jù)進(jìn)行加密和解密。在Mrdoc中,我們借助Django項(xiàng)目中的SECRET_KEY變量來作為秘鑰。原則就是,盡量復(fù)雜且長:

key = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'

接下來對數(shù)據(jù)的加密和解密,我們都需要使用到這個秘鑰。

二、對數(shù)據(jù)進(jìn)行加密

我們的加密邏輯其實(shí)很簡單,核心是一個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”使用這個加密方法進(jìn)行加密,最終會得到如下所示的加密字符串:

'222_215_218_152_169_200_231_'

三、對數(shù)據(jù)進(jìn)行解密

與加密的邏輯相反,我們需要把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)

運(yùn)行上述代碼,我們會得到如下圖所示的結(jié)果:

 

四、最后

可以發(fā)現(xiàn),這個方法對于一般性的數(shù)據(jù)加解密而言,還是比較簡單和便捷的,唯一需要考量的是秘鑰的復(fù)雜性和安全性,如果有更好地實(shí)現(xiàn)方法,歡迎留言討論:)

ps:Python利用字符串自帶函數(shù)實(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 

這種方式十分的簡單,其中makestrans里面的兩個參數(shù)的內(nèi)容是一一對應(yīng)的,解密只需要將映射方向轉(zhuǎn)變一下就行。

總結(jié)

以上所述是小編給大家介紹的Python內(nèi)置方法實(shí)現(xiàn)字符串的秘鑰加解密,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • 解決python刪除文件的權(quán)限錯誤問題

    解決python刪除文件的權(quán)限錯誤問題

    下面小編就為大家分享一篇解決python刪除文件的權(quán)限錯誤問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python獲取list下標(biāo)及其值的簡單方法

    python獲取list下標(biāo)及其值的簡單方法

    下面小編就為大家?guī)硪黄猵ython獲取list下標(biāo)及其值的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 詳解Python 中的容器 collections

    詳解Python 中的容器 collections

    這篇文章主要介紹了Python 中的容器 collections的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • HTML中使用python屏蔽一些基本功能的方法

    HTML中使用python屏蔽一些基本功能的方法

    這篇文章主要介紹了HTML中使用python屏蔽一些基本功能的方法,需要的朋友可以參考下
    2017-07-07
  • Python搭建代理IP池實(shí)現(xiàn)存儲IP的方法

    Python搭建代理IP池實(shí)現(xiàn)存儲IP的方法

    這篇文章主要介紹了Python搭建代理IP池實(shí)現(xiàn)存儲IP的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python中的Pydantic序列化詳解

    Python中的Pydantic序列化詳解

    這篇文章主要介紹了Python中的Pydantic序列化詳解,Pydantic 是 Python 中一個高性能的數(shù)據(jù)驗(yàn)證和序列化庫,它提供了一個簡單而強(qiáng)大的方式來定義結(jié)構(gòu)化的數(shù)據(jù),并在應(yīng)用程序的各個層次中使用這些數(shù)據(jù),需要的朋友可以參考下
    2023-10-10
  • Python實(shí)現(xiàn)將json文件中向量寫入Excel的方法

    Python實(shí)現(xiàn)將json文件中向量寫入Excel的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)將json文件中向量寫入Excel的方法,涉及Python讀取、遍歷json格式數(shù)據(jù)及Excel文件寫入相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • python+Word2Vec實(shí)現(xiàn)中文聊天機(jī)器人的示例代碼

    python+Word2Vec實(shí)現(xiàn)中文聊天機(jī)器人的示例代碼

    本文主要介紹了python+Word2Vec實(shí)現(xiàn)中文聊天機(jī)器人,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python中的日志文件按天分割

    python中的日志文件按天分割

    這篇文章主要介紹了python中的日志文件按天分割方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python使用qrcode庫實(shí)現(xiàn)生成二維碼的操作指南

    Python使用qrcode庫實(shí)現(xiàn)生成二維碼的操作指南

    二維碼是一種廣泛使用的二維條碼,因其高效的數(shù)據(jù)存儲能力和易于掃描的特點(diǎn),廣泛應(yīng)用于支付、身份驗(yàn)證、營銷推廣等領(lǐng)域,Python qrcode 庫是一個生成二維碼的工具,它能夠幫助我們輕松地生成二維碼,在本文中,我們將深入解析 qrcode 庫的使用方法及其實(shí)際應(yīng)用
    2025-01-01

最新評論

来安县| 宁城县| 中江县| 十堰市| 鞍山市| 郴州市| 当雄县| 夏河县| 呼伦贝尔市| 云阳县| 通辽市| 宜兰县| 武功县| 临夏县| 藁城市| 运城市| 蕲春县| 高州市| 东阿县| 肥西县| 泾阳县| 平舆县| 怀远县| 论坛| 西青区| 彭水| 昆明市| 天门市| 沧源| 天全县| 翁源县| 南城县| 拜泉县| 苍山县| 环江| 进贤县| 阿拉善右旗| 墨江| 黑龙江省| 噶尔县| 长兴县|