python3利用cryptography 進行加密和解密


我們的日常工作中,一定會遇到需要加密的數據,比如:密碼、私密信息... ...

我們不僅要對他們進行加密,更需要對他們進行解密,因為畢竟我們的用戶應該不會看得懂加密過后的字符串吧!!!

在python強大的第三方插件庫中,就有這么一個插件,很好的解決了我們的問題,這個插件的名為:cryptography

cryptography: 的目標是成為“人類易於使用的密碼學包cryptography for humans”,就像 requests 是“人類易於使用的 HTTP 庫HTTP for Humans”一樣。這個想法使你能夠創建簡單安全、易於使用的加密方案。

cryptography安裝。

如果你使用的 Python 版本是 3.5及以上, 你可以使用 pip 安裝,如下:

  pip install cryptography

cryptography加密。

我們使用 Fernet 對稱加密算法,它保證了你加密的任何信息在不知道密碼的情況下不能被篡改或讀取。Fernet 還通過 MultiFernet 支持密鑰輪換。

下面讓我們看一個簡單的例子:

from cryptography.fernet import Fernet
#生成秘鑰cipher_key
cipher_key = Fernet.generate_key()
print(cipher_key)
cipher = Fernet(cipher_key)
text = b'My name is PanChao.'
#進行加密
encrypted_text = cipher.encrypt(text)
print(encrypted_text)
#進行解密
decrypted_text = cipher.decrypt(encrypted_text)
print(decrypted_text)

我們可以看到運行上面代碼結果為:

  

首先我們需要導入 Fernet,然后生成一個密鑰。我們輸出密鑰看看它是什么樣兒。如你所見,它是一個隨機的字節串。如果你願意的話,可以試着多運行 generate_key 方法幾次,生成的密鑰會是不同的。然后我們使用這個密鑰生成 Fernet 密碼實例。

現在我們有了用來加密和解密消息的密碼。下一步是創建一個需要加密的消息,然后使用 encrypt 方法對它加密。我打印出加密的文本,然后你可以看到你再也讀不懂它了。為了解密出我們的秘密消息,我們只需調用 decrypt 方法,並傳入加密的文本作為參數。結果就是我們得到了消息字節串形式的純文本。

以上淺顯地介紹了cryptography 包的使用。不過這也確實給了你一個關於如何加密解密字符串的簡述。請務必閱讀文檔,做做實驗,看看還能做些什么!

 

下面附帶一個des對稱加密的python實現方法:

from pyDes import des, CBC, PAD_PKCS5
import binascii

# 秘鑰
KEY = 'mHAxsLYz'

def des_encrypt(s):
    """
    DES 加密
    :param s: 原始字符串
    :return: 加密后字符串,16進制
    """
    secret_key = KEY
    iv = secret_key
    k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    en = k.encrypt(s, padmode=PAD_PKCS5)
    return binascii.b2a_hex(en)

def des_descrypt(s):
    """
    DES 解密
    :param s: 加密后的字符串,16進制
    :return:  解密后的字符串
    """
    secret_key = KEY
    iv = secret_key
    k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
    return de

test = des_encrypt("panchao")
print(test)
print(des_descrypt(test))

 

希望能幫到需要的人。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM