欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

對于密碼認證來說,MD5加密是比較適合的,因為其不需要接觸到明文的數(shù)據(jù),只需要比對MD5加密后的哈希值就能判斷數(shù)據(jù)是否一致;而對于一些在加密后進行解密的數(shù)據(jù)而言,AES則更加的常用。

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

一、設置一個秘鑰

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

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

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

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

我們的加密邏輯其實很簡單,核心是一個Python內置方法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的內置方法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)

運行上述代碼,我們會得到如下圖所示的結果:

 

四、最后

可以發(fā)現(xiàn),這個方法對于一般性的數(shù)據(jù)加解密而言,還是比較簡單和便捷的,唯一需要考量的是秘鑰的復雜性和安全性,如果有更好地實現(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 

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

總結

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

相關文章

  • Pycharm報錯Non-zero?exit?code?(2)的完美解決方案

    Pycharm報錯Non-zero?exit?code?(2)的完美解決方案

    最近在使用pycharm安裝或升級模塊時出現(xiàn)了錯誤,下面這篇文章主要給大家介紹了關于Pycharm報錯Non-zero?exit?code?(2)的完美解決方案,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Win10 安裝PyCharm2019.1.1(圖文教程)

    Win10 安裝PyCharm2019.1.1(圖文教程)

    這篇文章主要介紹了Win10 安裝PyCharm2019.1.1(圖文教程),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • python密碼學庫pynacl功能介紹

    python密碼學庫pynacl功能介紹

    PyNaCI能夠提供數(shù)字簽名、密鑰加密、公鑰加密、哈希和消息身份驗證、基于密碼的密鑰派生和密碼散列功能,這篇文章主要介紹了python密碼學庫pynacl,感興趣的朋友一起看看吧
    2022-05-05
  • 使用Python實現(xiàn)多功能課堂點名器與抽簽工具

    使用Python實現(xiàn)多功能課堂點名器與抽簽工具

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)多功能課堂點名器,也可以用作抽簽工具,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • Python爬蟲回測股票的實例講解

    Python爬蟲回測股票的實例講解

    在本篇文章里小編給大家整理的是一篇關于Python爬蟲回測股票的實例講解內容,有興趣的朋友們可以學習下。
    2021-01-01
  • 解讀opencv->tensorrt的數(shù)據(jù)排列方式

    解讀opencv->tensorrt的數(shù)據(jù)排列方式

    這篇文章主要介紹了解讀opencv->tensorrt的數(shù)據(jù)排列方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python自動更新pom文件的方法

    python自動更新pom文件的方法

    這篇文章主要介紹了python自動更新pom文件的方法,本文通過圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • python廣度優(yōu)先搜索得到兩點間最短路徑

    python廣度優(yōu)先搜索得到兩點間最短路徑

    這篇文章主要為大家詳細介紹了python廣度優(yōu)先搜索得到兩點間最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解python3類型注釋annotations實用案例

    詳解python3類型注釋annotations實用案例

    這篇文章主要介紹了詳解python3類型注釋annotations實用案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 初學者快看,Python下劃線的五個作用介紹

    初學者快看,Python下劃線的五個作用介紹

    大家好,本篇文章主要講的是初學者快看,Python下劃線的五個作用介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論