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

Python玩轉(zhuǎn)加密的技巧【推薦】

 更新時(shí)間:2019年05月13日 09:36:54   作者:佚名  
Python 中的一個(gè)有用的基本加密庫就叫做 cryptography 。這篇文章主要介紹了Python玩轉(zhuǎn)加密的技巧,需要的朋友可以參考下

密碼學(xué)俱樂部的第一條規(guī)則是:永遠(yuǎn)不要自己發(fā)明密碼系統(tǒng)。密碼學(xué)俱樂部的第二條規(guī)則是:永遠(yuǎn)不要自己實(shí)現(xiàn)密碼系統(tǒng):在現(xiàn)實(shí)世界中,在實(shí)現(xiàn)以及設(shè)計(jì)密碼系統(tǒng)階段都找到過許多漏洞。

Python 中的一個(gè)有用的基本加密庫就叫做 cryptography 。它既是一個(gè)“安全”方面的基礎(chǔ)庫,也是一個(gè)“危險(xiǎn)”層。“危險(xiǎn)”層需要更加小心和相關(guān)的知識(shí),并且使用它很容易出現(xiàn)安全漏洞。在這篇介紹性文章中,我們不會(huì)涵蓋“危險(xiǎn)”層中的任何內(nèi)容!

cryptography 庫中最有用的高級(jí)安全功能是一種 Fernet 實(shí)現(xiàn)。Fernet 是一種遵循最佳實(shí)踐的加密緩沖區(qū)的標(biāo)準(zhǔn)。它不適用于非常大的文件,如千兆字節(jié)以上的文件,因?yàn)樗竽阋淮渭虞d要加密或解密的內(nèi)容到內(nèi)存緩沖區(qū)中。

Fernet 支持 對(duì)稱(symmetric)(即 密鑰(secret key))加密方式*:加密和解密使用相同的密鑰,因此必須保持安全。

生成密鑰很簡單:

>>> k = fernet.Fernet.generate_key() 
>>> type(k) 
<class 'bytes'>

這些字節(jié)可以寫入有適當(dāng)權(quán)限的文件,最好是在安全的機(jī)器上。

有了密鑰后,加密也很容易:

>>> frn = fernet.Fernet(k) 
>>> encrypted = frn.encrypt(b"x marks the spot") 
>>> encrypted[:10] 
b'gAAAAABb1'

如果在你的機(jī)器上加密,你會(huì)看到略微不同的值。不僅因?yàn)?我希望)你生成了和我不同的密鑰,而且因?yàn)?Fernet 將要加密的值與一些隨機(jī)生成的緩沖區(qū)連接起來。這是我之前提到的“最佳實(shí)踐”之一:它將阻止對(duì)手分辨哪些加密值是相同的,這有時(shí)是攻擊的重要部分。

解密同樣簡單:

>>> frn = fernet.Fernet(k) 
>>> frn.decrypt(encrypted) 
b'x marks the spot'

請(qǐng)注意,這僅加密和解密字節(jié)串。為了加密和解密文本串,通常需要對(duì)它們使用 UTF-8 進(jìn)行編碼和解碼。

20 世紀(jì)中期密碼學(xué)最有趣的進(jìn)展之一是 公鑰(public key)加密。它可以在發(fā)布加密密鑰的同時(shí)而讓解密密鑰保持保密。例如,它可用于保存服務(wù)器使用的 API 密鑰:服務(wù)器是唯一可以訪問解密密鑰的一方,但是任何人都可以保存公共加密密鑰。

雖然 cryptography 沒有任何支持公鑰加密的安全功能,但 PyNaCl 庫有。PyNaCl 封裝并提供了一些很好的方法來使用 Daniel J. Bernstein 發(fā)明的 NaCl 加密系統(tǒng)。

NaCl 始終同時(shí) 加密(encrypt)和 簽名(sign)或者同時(shí) 解密(decrypt)和 驗(yàn)證簽名(verify signature)。這是一種防止 基于可伸縮性(malleability-based)的攻擊的方法,其中攻擊者會(huì)修改加密值。

加密是使用公鑰完成的,而簽名是使用密鑰完成的:

>>> from nacl.public import PrivateKey, PublicKey, Box 
>>> source = PrivateKey.generate() 
>>> with open("target.pubkey", "rb") as fpin: 
... target_public_key = PublicKey(fpin.read()) 
>>> enc_box = Box(source, target_public_key) 
>>> result = enc_box.encrypt(b"x marks the spot") 
>>> result[:4] 
b'\xe2\x1c0\xa4'

解密顛倒了角色:它需要私鑰進(jìn)行解密,需要公鑰驗(yàn)證簽名:

>>> from nacl.public import PrivateKey, PublicKey, Box 
>>> with open("source.pubkey", "rb") as fpin: 
... source_public_key = PublicKey(fpin.read()) 
>>> with open("target.private_key", "rb") as fpin: 
... target = PrivateKey(fpin.read()) 
>>> dec_box = Box(target, source_public_key) 
>>> dec_box.decrypt(result) 
b'x marks the spot'

最后, PocketProtector 庫構(gòu)建在 PyNaCl 之上,包含完整的密鑰管理方案。

ps:下面看下python 加密方法總結(jié)

MD5

def md5(str):
  import hashlib
  m = hashlib.md5()
  m.update(str)
  return m.hexdigest()

 base64

 import base64
 s = '我是字符串'
 a = base64.b64encode(s)
 print a
print base64.b64decode(a)
輸出結(jié)果:
ztLKx9fWt/u0rg==
我是字符串

總結(jié)

以上所述是小編給大家介紹的Python玩轉(zhuǎn)加密的技巧【推薦】,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Pickle模塊中的dump()和load()方法簡介

    Pickle模塊中的dump()和load()方法簡介

    Pickle模塊實(shí)現(xiàn)了基本的數(shù)據(jù)序列化與反序列化操作,通過序列化操作,我們可以將程序中運(yùn)行的對(duì)象信息轉(zhuǎn)化為字節(jié)流保存到文件中去,永久存儲(chǔ)在磁盤上,這篇文章主要介紹了Pickle模塊中的dump()和load()方法介紹,需要的朋友可以參考下
    2023-03-03
  • python DES加密與解密及hex輸出和bs64格式輸出的實(shí)現(xiàn)代碼

    python DES加密與解密及hex輸出和bs64格式輸出的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python DES加密與解密及hex輸出和bs64格式輸出的實(shí)現(xiàn)代碼,代碼簡單易懂,非常不錯(cuò)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python multiprocessing 多進(jìn)程并行計(jì)算的操作

    python multiprocessing 多進(jìn)程并行計(jì)算的操作

    這篇文章主要介紹了python multiprocessing 多進(jìn)程并行計(jì)算的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python數(shù)據(jù)結(jié)構(gòu)棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換簡單示例

    Python數(shù)據(jù)結(jié)構(gòu)棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換簡單示例

    眾所周知計(jì)算機(jī)的內(nèi)存都是以二進(jìn)制的形式進(jìn)行數(shù)據(jù)存儲(chǔ),下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)結(jié)構(gòu)棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Python中的imread()函數(shù)用法說明

    Python中的imread()函數(shù)用法說明

    這篇文章主要介紹了Python中的imread()函數(shù)用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python解決12306登錄驗(yàn)證碼的實(shí)現(xiàn)

    python解決12306登錄驗(yàn)證碼的實(shí)現(xiàn)

    這篇文章主要介紹了python解決12306登錄驗(yàn)證碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python用字典構(gòu)建多級(jí)菜單功能

    Python用字典構(gòu)建多級(jí)菜單功能

    這篇文章主要介紹了Python用字典構(gòu)建多級(jí)菜單功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python3.6簡單的操作Mysql數(shù)據(jù)庫的三個(gè)實(shí)例

    Python3.6簡單的操作Mysql數(shù)據(jù)庫的三個(gè)實(shí)例

    今天小編就為大家分享一篇關(guān)于Python3.6簡單的操作Mysql數(shù)據(jù)庫的三個(gè)實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 解決pytorch中的kl divergence計(jì)算問題

    解決pytorch中的kl divergence計(jì)算問題

    這篇文章主要介紹了解決pytorch中的kl divergence計(jì)算問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 對(duì)python中的argv和argc使用詳解

    對(duì)python中的argv和argc使用詳解

    今天小編就為大家分享一篇對(duì)python中的argv和argc使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評(píng)論