本文目錄一覽:
如何使用Python 3的兩個庫來加解密字元串
哈希
如果需要用到安全哈希演算法或是消息摘要演算法,那麼你可以使用標準庫中的 hashlib 模塊。這個模塊包含了符合 FIPS(美國聯邦信息處理標準)的安全哈希演算法,包括 SHA1,SHA224,SHA256,SHA384,SHA512 以及 RSA 的 MD5 演算法。Python 也支持 adler32 以及 crc32 哈希函數,不過它們在 zlib 模塊中。
哈希的一個最常見的用法是,存儲密碼的哈希值而非密碼本身。當然了,使用的哈希函數需要穩健一點,否則容易被破解。另一個常見的用法是,計算一個文件的哈希值,然後將這個文件和它的哈希值分別發送。接收到文件的人可以計算文件的哈希值,檢驗是否與接受到的哈希值相符。如果兩者相符,就說明文件在傳送的過程中未經篡改。
讓我們試著創建一個 md5 哈希:
import hashlib md5 = hashlib.md5() md5.update(‘Python rocks!’) Traceback (most recent call last): File “pyshell#5”, line 1, in module md5.update(‘Python rocks!’) TypeError: Unicode-objects must be encoded before hashing md5.update(b’Python rocks!’) md5.digest() b’\x14\x82\xec\x1b#d\xf6N}\x16*+[\x16\xf4w’
讓我們花點時間一行一行來講解。首先,我們導入 hashlib ,然後創建一個 md5 哈希對象的實例。接著,我們向這個實例中添加一個字元串後,卻得到了報錯信息。原來,計算 md5 哈希時,需要使用位元組形式的字元串而非普通字元串。正確添加字元串後,我們調用它的 digest 函數來得到哈希值。如果你想要十六進位的哈希值,也可以用以下方法:
md5.hexdigest() ‘1482ec1b2364f64e7d162a2b5b16f477’
實際上,有一種精簡的方法來創建哈希,下面我們看一下用這種方法創建一個 sha1 哈希:
sha = hashlib.sha1(b’Hello Python’).hexdigest() sha ‘422fbfbc67fe17c86642c5eaaa48f8b670cbed1b’
可以看到,我們可以同時創建一個哈希實例並且調用其 digest 函數。然後,我們列印出這個哈希值看一下。這裡我使用 sha1 哈希函數作為例子,但它不是特別安全,讀者可以隨意嘗試其他的哈希函數。
密鑰導出
Python 的標準庫對密鑰導出支持較弱。實際上,hashlib 函數庫提供的唯一方法就是 pbkdf2_hmac 函數。它是 PKCS#5 的基於口令的第二個密鑰導出函數,並使用 HMAC 作為偽隨機函數。因為它支持「加鹽(salt)」和迭代操作,你可以使用類似的方法來哈希你的密碼。例如,如果你打算使用 SHA-256 加密方法,你將需要至少 16 個位元組的「鹽」,以及最少 100000 次的迭代操作。
簡單來說,「鹽」就是隨機的數據,被用來加入到哈希的過程中,以加大破解的難度。這基本可以保護你的密碼免受字典和彩虹表(rainbow table)的攻擊。
讓我們看一個簡單的例子:
import binascii dk = hashlib.pbkdf2_hmac(hash_name=’sha256′, password=b’bad_password34′, salt=b’bad_salt’, iterations=100000) binascii.hexlify(dk) b’6e97bad21f6200f9087036a71e7ca9fa01a59e1d697f7e0284cd7f9b897d7c02′
這裡,我們用 SHA256 對一個密碼進行哈希,使用了一個糟糕的鹽,但經過了 100000 次迭代操作。當然,SHA 實際上並不被推薦用來創建密碼的密鑰。你應該使用類似 scrypt 的演算法來替代。另一個不錯的選擇是使用一個叫 bcrypt 的第三方庫,它是被專門設計出來哈希密碼的。
Python編程實現加密解密讀取文件
對 Python 加密時可能會有兩種形式,一種是對Python轉成的exe進行保護,另一種是直接對.py或者.pyc文件進行保護,下面將列舉兩種形式的保護流程。
1、 對 python轉exe加殼
下載最新版Virbox Protector加殼工具,使用加殼工具直接對demo.exe進行加殼操作
2、對.py/.pyc加密
第一步,使用加殼工具對 python 安裝目錄下的 python.exe 進行加殼,將 python.exe 拖入到加殼工具 VirboxProtector 中,配置後直接點擊加殼。
第二步,對.py/.pyc 進行加密,使用 DSProtector 對.py/.pyc 進行保護。
安全技術:
l 虛擬機外殼:精銳5的外殼保護工具,創新性的引入了預分析和自動優化引擎,有效的解決了虛擬化保護代碼時的安全性和性能平衡問題。
l 碎片代碼執行:利用自身成熟的外殼中的代碼提取技術,抽取大量、大段代碼,加密混淆後在安全環境中執行,最大程度上減少加密鎖底層技術和功能的依賴,同時大量大段地移植又保證了更高的安全性。
l Virbox加密編譯引擎:集編譯、混淆等安全功能於一身,由於在編譯階段介入,可優化空間是普遍虛擬化技術無法比擬的,對代碼、變數的混淆程度也有了根本的提升。
l 反黑引擎:內置R0級核心態反黑引擎,基於黑客行為特徵 的(反黑資料庫)反制手段。精準打擊調試、注入、內存修改等黑客行為,由被動挨打到主動防護。
加密效果:
加密之前
以pyinstall 的打包方式為例,使用pyinstxtractor.py文件對log_322.exe進行反編譯,執行後會生成log_322.exe_extracted文件夾,文件夾內會生成pyc文件。
成功之後會在同目錄下生成一個文件夾
使用010 Editor添加幾個位元組,重命名為pyc文件
注【此處和python的版本有關,Python27的可以直接解壓為pyc文件,Python34還需要添加幾個位元組】
然後使用EasyPython Decompiler 工具反編譯pyc
成功之後通目錄下會生成dis文件,生成出的dis文件可以用文本編輯器打開,看到源碼
反編譯後的log_322.exe的源碼
加密之後:
【註:不同的打包方式原理不同,源碼存放的位置也不同,所以需要保護的具體模塊也是不同的】
加密之後再嘗試解壓log322.exe失敗,已經無法進行反編譯,使用常規反編譯工具也是無法進行分析的。
釘釘加密文件怎麼解密
如果你是用第三方加密軟體加密了文件,想用釘釘發出的話,那麼就需要管理員授權解密後才能正常發出,未授權解密的文件無論以任何形式發出都是無法正常打開使用的。據我了解很多加密軟體都是採用的這個原理,在內部環境是可以正常打開使用,但是需要外發就得授權解密。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/287188.html