目錄
一、簡介:
1.1、概述:
1.2、crypt:
二、示例:
2.1、示例1:
2.2、示例2:
思路:
main()函數
testPass()函數
2.3、注:
split():
2.4、總結:
一、簡介:
1.1、概述:
編寫UNIX密碼破解機時,需使用UNIX計算密碼hash的crypt()算法
The crypt module is not supported on Windows(Windows不支援crypt子產品)
1.2、crypt:
crypt.crypt(word, salt=None)
驗證 Unix 密碼的函數
啟動Python 解釋器,Python 标準庫中已自帶有crypt 庫。要計算一個加密的UNIX 密碼hash, 隻需調用函數crypt.crypt(), 并将密碼和salt作為參數傳遞給它。該函數會以字元串形式傳回密碼的hash
二、示例:
2.1、示例1:
明文是單詞egg 和salt 就是開頭的兩個位元組是HX
使用crypt()函數快速計算密碼的hash。将庫導入之後, 我們将密碼“ egg" 與salt"HX"傳遞給函數。該函數傳回密碼的hash一一字元串為“ HX9LLTdc/jiDE" 。
>>> import crypt >>> crypt.crypt("egg","HX") 'HX9LLTdc/jiDE'
2.2、示例2:
思路:
可以編寫一個程式來周遊整個字典, 将每一個單詞加上指定的salt 的計算結果都與加密的密碼hash 做比較
首先要建立兩個函數: main 和testpass。根據各自特定的作用, 将程式分隔成互相獨立的函數,便于重用代碼,易于閱讀。
main()函數
用main 函數打開加密密碼檔案” password.txt", 并逐行讀取密碼檔案中的内容。每一行中的使用者名和密碼hash 都是分隔開的。對每個密碼hash, main 函數都調用testPass()函數, 嘗試用字典中的單詞破解它。testPass()函數
testPass()函數會以參數形式獲得加密的密碼hash, 并在找到密碼或搜遍字典無果後傳回。要注意的是, 該函數首先将加密的密碼hash 的前兩個字元視為salt, 并提取出來。然後, 它打開字典并周遊字典中的每個單詞, 用每個單詞和salt 計算一個新的加密密碼hash。
如果計算結果與我們加密密碼hash 比對, 函數會列印一條消息顯示找到密碼, 并傳回。否
則, 它會在詞庫中繼續對每個單詞進行測試。
import crypt
def testPass(cryptPass):
salt = cryptPass[0:2]
dictFile = open ('dictionary.txt', 'r')
for word in dictFile.readlines():
word = word.strip( '\n' )
cryptWord = crypt.crypt(word, salt)
if cryptWord==cryptPass:
print("Found Password: " + word + "\n")
print("Password Not Found.\n")
def main():
passFile = open('passwords. txt')
for line in passFile.readlines():
if ":" in line:
user = line.split(':')[0]
cryptPass = line.split(':')[1].strip(' ')
print("Cracking Password For: " + user)
testPass(cryptPass)
if __name__ == '__main__':
main()
2.3、注:
split():
簡介:
通過指定分隔符對字元串進行切片,如果參數 num 有指定值,則分隔 num+1 個子字元串
文法:
str.split(str="", num=string.count(str)).
str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、制表符(\t)等。
num -- 分割次數。預設為 -1, 即分隔所有。
傳回分割後的字元串清單。
2.4、總結: