翻譯|行業資訊|編輯:周思宇|2023-05-31 11:54:32.157|閱讀 91 次
概述:本文介紹如何創建更好的密碼短語,使其更容易記憶,并且更難被破解,歡迎查閱!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
JetBrains是一家尖端的軟件供應商,專門創建智能開發工具,包括IntelliJ IDEA--領先的Java IDE,以及Kotlin編程語言。無論你的團隊是大是小,我們的產品將確保其在構建和發送代碼、計劃工作和協作時始終有一個順利和愉快的體驗。無論你用什么平臺或語言工作,JetBrains都有適合你的開發工具。
PyCharm是一種Python IDE,其帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具。此外,該IDE提供了一些高級功能,以用于Django框架下的專業Web開發。
在上篇文章中,我們學習了密碼短語、密碼短語生成器的概念并生成了第一個密碼短語,本文繼續介紹如何創建更好的密碼短語,使其更容易記憶,并且更難被破解。
您可能已經注意到,在上一步中生成的密碼短語有點難讀。如何將每個單詞大寫以提高可讀性?
我們在此應用程序中使用 Typer,因為我們不想只運行腳本并獲取密碼。我們需要創建一個命令行界面,以便我們可以將各種選項傳遞給腳本,從而控制生成的密碼的屬性。一種選擇是將單詞大寫。
當我們運行main.py時,會執行以下行:
... if __name__ == "__main__": typer.run(main)
所以,我們將使用typer來執行main函數。我們這樣做是因為 Typer 可以接受命令行參數,然后將它們作為參數傳遞給函數。
讓我們capitalize在main()函數中引入參數并使其False默認:
def main(capitalize = False): sub_nouns = read_words('sub_nouns.txt') ... passphrase = ''.join(phrase_words) print(passphrase)
根據 Python 編碼最佳實踐,我們應該指定參數類型。將插入符號放在上面capitalize并按?Enter / Alt+Enter。然后選擇Specify type for the reference using annotation。Type bool,因為它capitalize應該有一個Boolean值。
現在,如果capitalize為True,讓我們在連接單詞之前將它們大寫。以if大寫:開始if語句。讓我們以類似于修復read_words函數時使用的方式來實現它,只不過這次我們將使用一個活動模板,而不是手動編寫列表推導式。輸入“compl”并按“Enter”。然后指定列表推導式的所有元素,并按Tab鍵移動到下一個元素。
你將得出:
def main(capitalize: bool = False): sub_nouns = read_words('sub_nouns.txt') verbs = read_words('verbs.txt') adjectives = read_words('adjectives.txt') obj_nouns = read_words('obj_nouns.txt') word_bank = [sub_nouns, verbs, adjectives, obj_nouns] phrase_words = [] for word_list in word_bank: random_word = random.SystemRandom().choice(word_list) phrase_words.append(random_word) if capitalize: phrase_words = [phrase_word.capitalize() for phrase_word in phrase_words] passphrase = ''.join(phrase_words) print(passphrase)
為了確保大寫字母正常運行,我們需要在運行main.py時將capitalize作為參數傳遞。要實現這一點,讓我們編輯運行配置。在IDE窗口的頂部尋找Run小部件:
您可以使用這個小部件來選擇所需的運行配置,以及在運行或調試模式下啟動它。當我們單擊gutter圖標并啟動腳本時,PyCharm已經創建了主配置。單擊配置名稱,打開菜單,選擇Edit configurations:
在打開的對話框中,在Parameters字段中指定——capitalize:
單擊OK保存更新后的配置。然后單擊小部件中的Run圖標。
結果如下:
為了更好的可讀性,我們可以將密碼短語中的單詞分開。使用特殊字符作為分隔符可以達到雙重目的,因為它可以讓我們生成符合特定密碼復雜度要求的密碼短語。
按如下方式編輯main()函數的倒數第二行:
def main(capitalize: bool = False): ... passphrase = separator.join(phrase_words)
PyCharm用一條紅色波浪線突出顯示分隔符,因為函數還沒有這個參數。將鼠標懸停在它上面,并在彈出窗口中選擇創建參數“separator”。然后將“”指定為默認值,因為在默認情況下我們不想添加任何分隔符。
我們還指定str作為參數類型。你應該得出以下內容:
def main(capitalize: bool = False, separator: str = ''): ... passphrase = separator.join(phrase_words) print(passphrase)
現在,更新運行配置。單擊Run小部件,選擇Edit configurations,并在Parameters字段中添加新參數:
運行配置查看結果:
現在你可以用特殊字符和數字來分隔密碼中的單詞。您甚至可以使用幾個符號來滿足各種網站的密碼要求,例如“#4”或“%7”。
密碼短語越長,成功暴力攻擊需要嘗試的次數就越多。讓我們在密碼中加入一個額外的單詞。
首先,我們將準備第五個包含副詞的單詞列表,并將其放在項目目錄中。將bool類型的long參數添加到main()函數的簽名中。根據這個參數(該參數是可選的,默認設置為False),我們將向word_bank添加另一個單詞列表:
def main(capitalize: bool = False, separator: str = '', long: bool = False): ... word_bank = [sub_nouns, verbs, adjectives, obj_nouns] if long: adverbs = read_words('adverbs.txt') word_bank.append(adverbs) ...
這一次,讓我們使用內置終端來運行腳本。按Ctrl +F12 / Alt+F12,在打開的終端工具窗口中輸入以下命令:
python main.py --capitalize --separator "1_" --long
你應該得到類似下面內容的結果:
如果您以前使用過CLI工具,就會知道它們通常只允許用戶使用一個字母指定參數。讓我們將此功能也添加到我們的工具中。為了更好的代碼可讀性,讓我們重新格式化函數簽名,以便每個參數都在單獨的行上:
def main( capitalize: bool = False, separator: str = '', long: bool = False ): ...
然后將每個參數的默認值替換為type。選項(<default_value>, <long_name>, <short_name>):
下面是main()的最終簽名:
def main( capitalize: bool = typer.Option(False, '--caps', '-c'), separator: str = typer.Option('', '--separator', '-s'), long: bool = typer.Option(False, '--long', '-l') ): ...
現在我們可以一起指定所有選項。分隔符(' -s ')應該放在最后,因為它后面需要一個字符串:
默認情況下,type還添加了——help選項?,F在讓我們看看它是如何工作的:
我們可以理解存在哪些參數以及它們的長、短名稱。如何添加注釋來解釋它們的實際作用?為main()的每個參數添加help如下:
現在——help產生了更多有用的信息:
您可能希望使用沒有PyCharm的密碼短語生成器,例如在系統終端中。在這種情況下,您應該使用以下命令將type安裝到系統解釋器中:
python3 -m pip install --user typer
以上便是如何創建更好的密碼短語的全部內容,如果您有其他問題也可以繼續瀏覽本系列文章,獲取相關教程,你還可以給我留言或者加入我們的官方技術交流群。
歡迎下載|體驗更多Jetbrains產品
獲取更多信息請咨詢 ;Jetbrains技術交流群(QQ):786598704
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn