1. 程式人生 > >Python之hashlib模塊md5加密

Python之hashlib模塊md5加密

名稱 數字 長度 arch tro blog asc odin 數據指紋

來源:

  • https://www.cnblogs.com/UnGeek/archive/2013/03/30/2990876.html
  • https://www.cnblogs.com/weiman3389/p/6056305.html
  • https://www.cnblogs.com/yyds/p/7072492.html
  • 加鹽——https://www.zhihu.com/question/20299384

一、基礎使用

技術分享
1 import hashlib
2 inp = input(輸入:>>)
3 
4 #創建一個md5加密對象
5 hash = hashlib.md5()
6 #生成md5加密字符串
7 hash.update(bytes(inp,encoding=
utf-8)) 8 #把md5加密好的字符串打印出來 9 print(hash.hexdigest())
使用hashlib
  • hash.update(data)
    • 更新哈希對象所要計算的數據,多次調用為累加效果
    • 如 m.update(a) ; m.update(b) 等價於 m.update(a+b)
  • hash.hexdigest()
    • 返回傳遞給update()函數的所有數據的摘要信息(又稱 數據指紋)
    • 十六進制格式的字符串
  • hash.digest()
    • 返回傳遞給update()函數的所有數據的摘要信息
    • 二進制格式的字符串

二、hashlib模塊使用步驟

  • 1、獲取一個哈希算法對應的哈希對象
    (比如名稱為hash)
    • hashlib.new(哈希算法名稱, 初始出入信息)
      • 獲取這個哈希對象,如hashlib.new(‘MD5‘,‘Hello‘),hashlib.new(‘SHA1‘,‘Hello‘)
    • hashlib.哈希算法名稱()
      • 獲取這個哈希對象,如hashlib.md5(),hashlib.sha1()
  • 2、設置/追加輸入信息
    • 調用已得到哈希對象的 update(輸入信息) 方法可以設置或追加輸入信息,多次調用該方法,等價於 把每次傳遞的參數憑借後進行作為一個參數墊底給update()方法。
    • 多次調用為累加,不是覆蓋,見hash.update()
  • 3、獲取輸入信息對應的摘要
    • 調用已得到的哈希對象的 digest() 方法或 hexdigest() 方法即可得到傳遞給update()方法的字符串參數的摘要信息。
    • digest()方法返回的摘要信息是一個二進制格式的字符串,其中可能包含非ASCII字符、NULL字節,該字符串長度可以通過哈希對象的 hash.disgest_size 屬性獲取
    • hexdigest()方法返回的摘要信息是一個十六進制格式的字符串,該字符串中只包含十六進制的數字,且長度比digest()返回結果長度的2倍,這可以用於郵件的安全交互或其他非二進制環境中。

三、優化

  1、防撞庫,使用“加鹽”加密

技術分享
1 import hashlib
2 inp = input(輸入:>>)
3 #創建一個md5加密對象,並‘加鹽’加密,防撞庫反解
4 hash = hashlib.md5(super.encode(utf-8))
5 #生成md5加密字符串
6 hash.update(bytes(inp,encoding=utf-8))
7 #把md5加密好的字符串打印出來
8 print(hash.hexdigest())
“加鹽”

  2、一句

技術分享
1 hash = hashlib.md5(inp.encode(utf-8)).hexdigest()
一句

Python之hashlib模塊md5加密