密碼學、密碼學和密碼分析

讓我們進入編寫最終項目時需要的理論知識。讓我們更多地了解密碼學及其組成部分。同時,我們將更多地了解您在編寫最終項目時將使用的密碼。

1. 密碼學及其組成部分

密碼學是一個知識領域,包括:

  • 密碼學(密碼學)。

    密碼學就是對信息進行加密以防止未經授權的訪問。此信息可以是文本、數字圖像、音頻信號等。加密過程會生成信息(數據)的加密版本,稱為密文或代碼文本。

  • 密碼分析(破解這些密碼的方法)。

    密碼分析檢查破解密碼的方法以及如何應用這些方法。換句話說,密碼分析執行相反的任務,研究將加密信息轉換為明文的方法。

2. 密鑰

密鑰是用於加密和解密信息的一組數據。成功解密信息的能力取決於所使用的密鑰。如果由於某種原因丟失了密鑰,則無法解密數據。

加密密鑰的大小以位為單位。這意味著加密密鑰的長度。128 位的長度提供了良好的加密強度。

加密密鑰的類型:

  1. 對稱密鑰(秘密密鑰)。不出所料,此類密鑰用於所謂的對稱密鑰算法。它們的主要目的是執行正向或反向密碼轉換(加密/解密,消息驗證碼的驗證)。

  2. 非對稱密鑰。它們用於非對稱密鑰加密算法(例如,在驗證電子數字簽名時)。

由於我們將使用對稱密鑰加密算法,因此我們不會在這裡詳細介紹。

3.替換字母表

替換字母表是用於對輸入字符進行編碼的一組完整字符。

4. 密碼分析方法

有許多不同的密碼分析途徑和方法,即破解密碼的方法。

我們將描述其中最簡單的:

  1. 蠻力(或蠻力搜索)正在嘗試所有可能的密鑰,直到我們找到正確的密鑰。這種方法的優點是簡單。缺點是它不適用於涉及大量可能密鑰的密碼。

  2. 基於統計數據的密碼分析——在這種方法中,我們統計密文中不同字符的出現次數,然後根據明文中不同字符出現頻率的統計數據進行解密。

    例如:我們知道字母P在英文文本中出現的頻率是1.9%。當我們分析密文時,我們尋找一個以相同頻率出現的符號,然後斷定它是字母 P。

    這種方法的缺點是它依賴於文本的特定語言、作者和風格。

5.凱撒密碼

這是最簡單和最著名的加密方法之一。它的名字當然來自皇帝蓋烏斯·尤利烏斯·凱撒,他用這種方式與將軍們秘密通信。

凱撒密碼是一種替換密碼,其中明文中的每個字符都被一個字符替換,該字符在字母表中的左側或右側位置為某個常數。

假設我們將班次設置為 3。在這種情況下,A 將替換為 D,B 將變為 E,依此類推。

這是完成最終項目所需的最少理論知識。讓我們繼續任務描述!

Java 語法模塊的最終項目。讓我們寫一個密碼分析器

你的任務是編寫一個使用凱撒密碼的程序。

讓您的密碼字母表由英文字母表的所有字母以及標點符號(.,””:-!?空格)組成。如果您遇到不屬於我們替換字母表的字符,則跳過它們。

強制要求

該程序應該有兩種模式:

  1. 加密/解密。該程序必須使用給定的加密密鑰加密和解密文本。

    該程序應接收到包含源文本的文本文件的路徑,並創建一個包含相應密文的文件。

  2. 通過蠻力攻擊進行密碼分析

    在這種模式下,程序必須破解包含在輸入文本文件中的密文。

    如果用戶選擇暴力破解,那麼程序必須獨立枚舉可能的密鑰,選擇正確的密鑰,然後解密文本。

    想想程序應該使用什麼標準來成功識別正確的密鑰。您可能需要注意單詞之間的空格或標點符號的正確使用。

附加(可選)要求

1. 統計分析密碼分析

用戶應該能夠選擇兩種密碼分析方法中的一種。如果用戶選擇統計分析模式,則提示用戶以明文形式加載額外的文本文件,最好是同一作者和相同風格的文件。根據第二個文件的內容,程序應該編譯字符出現的統計數據,然後嘗試使用這些統計數據對密文進行密碼分析。

2. 用戶界面

根據您的判斷製作與用戶交互的對話框。如果需要,您可以使用 Swing 和 JavaFX 圖形框架。

將完成的解決方案上傳到公共 Git 存儲庫。

該項目將在小組通過時進行檢查