本文目錄一覽:
如何使用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中如何獲取sha1值賦給變數
你好,我覺得你可以將openssl dgst -sha1的結果結果放到一個文件,然後讓python讀取那個文件,就可以了
os.system(openssl dgst -sha1 log1)
with open(log1, “r”) as f:
…….
python hashlib.sha512 為什麼加密結果和shadow不一樣
python的話直接使用crypt就行計算的時候要加上salt值。
cat /etc/shadow | greb root
得到密文。 密文由3部分組成,以」$」分隔,第一部分為ID,第二部分為鹽值,第三部分為加密密文
密文示例:
$6$D0xsORq3b7GGsbYv$7L8myKFcJf1FqnvtzD.Zcbx9PeHnwGH1YJm/xDeEKmABPIxzUC7mQmEiIEHoHypXeJ969Tfp4c47WQgjkT0YH0
$id$salt$encrypted
採用方法 鹽值 加密密文
$6$D0xsORq3b7GGsbYv #這一段就是鹽值,在加密的時候連同前面的ID一起加密
import crypt
print crypt.crpyt(“password”,”$6$D0xsORq3b7GGsbYv”)
就可以得到shadow中的密文了。
其實shadow中的密文並不是直接由sha512得出的,還有一些其他操作,例如使用base64加密了salt和hash,可以看下這裡man page
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240637.html