5 分鐘速通密碼學!

讓我們開始第一部分:密碼學基礎 (Cryptography Basics)


在這里插入圖片描述

第一部分:密碼學基礎 (Cryptography Basics)

1. 什么是密碼學?

想象一下,在古代戰爭中,將軍需要向遠方的部隊傳遞作戰指令。如果直接派人送信,信件一旦被敵人截獲,后果不堪設想。怎么辦呢?他們會用一種秘密的“語言”來寫信,只有自己人才能看懂。這種把信息變“秘密”的技術,就是密碼學的雛形。

密碼學 (Cryptography),簡單來說,就是研究如何安全通信的科學與藝術。它涉及到一系列的方法和技術,用于保護信息不被未經授權的第三方讀取或修改。

密碼學的目標主要有以下幾個方面:

  • 保密性 (Confidentiality):確保信息只被授權的人訪問。就像給信件上了鎖,只有擁有鑰匙的人才能打開。
  • 完整性 (Integrity):確保信息在傳輸或存儲過程中沒有被篡改。就像給信件蓋上火漆印,如果印章完好,就說明信件內容沒有被動過。
  • 可用性 (Availability):確保授權用戶在需要時能夠訪問到信息和相關資源。就像確保你的鑰匙隨時能打開你的鎖一樣。
  • 認證 (Authentication):確認通信雙方的身份是真實的,而不是冒名頂替。就像通過核對筆跡或暗號來確認對方的身份。
  • 不可否認性 (Non-repudiation):確保發送者不能否認其發送過某條信息,接收者也不能否認其接收過某條信息。就像簽了名的合同,不能抵賴。

在網絡安全中的重要性:

在數字時代,我們的個人信息、金融交易、商業機密等都以數據的形式在網絡上傳輸和存儲。如果沒有密碼學的保護,這些敏感信息就如同裸奔在互聯網上,極易受到竊聽、篡改和濫用。

  • 保護在線交易:你每次在網上購物輸入銀行卡信息時,密碼學都在背后默默保護著你的數據不被泄露。
  • 保障通信安全:你使用的微信、WhatsApp等即時通訊工具,很多都采用了端到端加密技術,確保只有你和聊天對象能看到消息內容。
  • 維護數據隱私:從個人照片到企業數據庫,密碼學幫助我們加密存儲數據,防止數據泄露。
  • 確保軟件安全:軟件更新、數字證書等都依賴密碼學來驗證其來源的真實性和完整性。

可以說,密碼學是構建現代網絡安全的基石。理解密碼學的基本原理,對于我們認識和應對網絡威脅至關重要。

2. 核心概念與術語

學習任何一門學科,都需要先掌握它的基本“行話”。下面是一些密碼學中非常核心的概念和術語:

  • 明文 (Plaintext):指未經加密的、可以直接理解的原始信息。比如,你想發送的消息“明天上午10點開會”。
    • 生活化比喻:明文就像你用大白話寫的普通信件。
  • 密文 (Ciphertext):指明文經過加密處理后得到的信息,通常看起來是一串無意義的亂碼。比如,“明天上午10點開會”加密后可能變成“Xf5#gH@&kLpQwR”。
    • 生活化比喻:密文就像是用密碼本翻譯過的“火星文”信件,不懂密碼本的人完全看不懂。
  • 加密 (Encryption):將明文轉換為密文的過程。這個過程通常需要一個加密算法和一個密鑰
    • 生活化比喻:加密就像是把普通信件鎖進一個保險箱的過程。
  • 解密 (Decryption):將密文還原為明文的過程。這個過程通常也需要一個解密算法和一個密鑰(通常與加密密鑰相關)。
    • 生活化比喻:解密就像是用正確的鑰匙打開保險箱,取出里面的信件。
  • 密鑰 (Key):這是一段秘密信息,用于控制加密和解密的過程。密鑰的保密性至關重要,一旦密鑰泄露,密文就可能被破解。
    • 生活化比喻:密鑰就是打開保險箱的那把獨一無二的鑰匙。
    • 根據密鑰的使用方式,主要分為兩大類:
      • 對稱密鑰 (Symmetric Key):加密和解密使用相同的密鑰。就像你用同一把鑰匙鎖上和打開同一個鎖。
      • 非對稱密鑰 (Asymmetric Key):加密和解密使用不同但配對的密鑰,一個叫公鑰 (Public Key),一個叫私鑰 (Private Key)。我們后面會詳細講。
  • 算法 (Algorithm/Cipher):指進行加密或解密的一套明確的規則或數學過程。例如,著名的AES、DES、RSA等都是加密算法。
    • 生活化比喻:算法就像是保險箱的內部構造和鎖的設計圖紙,它規定了如何用鑰匙把東西鎖進去,以及如何用鑰匙把東西取出來。
3. 密碼學簡史與分類

密碼學的歷史源遠流長,幾乎和人類的文字史一樣悠久。

  • 古典密碼 (Classical Ciphers):這些是早期使用的密碼,通常基于字符的替換或移位。
    • 凱撒密碼 (Caesar Cipher):據說由古羅馬的凱撒大帝發明,非常簡單。它將字母表中的每個字母向后(或向前)移動固定位數。例如,如果密鑰是3,A就變成D,B就變成E,以此類推。這種密碼很容易被頻率分析破解。
      • 小例子:明文 HELLO,密鑰 3,密文 KHOOR
    • 維吉尼亞密碼 (Vigenère Cipher):這是一種多表代換密碼,比凱撒密碼更復雜一些。它使用一個關鍵詞作為密鑰,根據關鍵詞的不同字母來決定明文字母的移位位數。它在一段時間內被認為是“不可破譯的密碼”,但后來也被破解了。
  • 現代密碼 (Modern Ciphers):隨著計算機技術的發展,現代密碼學應運而生。它們基于復雜的數學原理,安全性遠超古典密碼。
    • 對稱密碼體制 (Symmetric Cryptography):也稱為秘密密鑰密碼體制或單密鑰密碼體制。其特點是加密和解密過程使用相同的密鑰。常見的對稱加密算法有 DES、3DES、AES、RC4、Blowfish等。
      • 優點:加密解密速度快,效率高。
      • 缺點:密鑰分發困難。如何安全地把同一個密鑰告訴通信的另一方是個大問題。
    • 非對稱密碼體制 (Asymmetric Cryptography):也稱為公鑰密碼體制。其特點是加密和解密使用一對不同的密鑰:公鑰和私鑰。公鑰可以公開,任何人都可以獲取;私鑰則由擁有者秘密保管。用公鑰加密的信息只能用對應的私鑰解密;用私鑰簽名(一種特殊的加密)的信息可以用對應的公鑰驗證。常見的非對稱加密算法有 RSA、ECC、Diffie-Hellman等。
      • 優點:解決了密鑰分發問題,可以實現數字簽名等功能。
      • 缺點:加密解密速度相對較慢。

通常在實際應用中,我們會結合使用對稱加密和非對稱加密的優點。例如,在HTTPS中,瀏覽器和服務器會先用非對稱加密協商一個臨時的對稱密鑰,然后用這個對稱密鑰進行后續的大量數據加密傳輸,這樣既安全又高效。


思考題:

  1. 你能用自己的話解釋一下“保密性”和“完整性”在密碼學中的區別嗎?試著舉一個生活中的例子。
  2. 如果小明使用凱撒密碼,密鑰是5,他想加密消息 ATTACK,那么密文會是什么?
  3. 對稱加密和非對稱加密最主要的區別是什么?它們各自有什么優缺點?

非常好!很高興看到大家對密碼學的基礎知識有了清晰的認識。現在,讓我們深入學習一個在現代密碼學中占據核心地位的概念——公鑰加密


第二部分:公鑰加密基礎 (Public Key Cryptography Basics)

1. 對稱加密的局限性

在上一部分我們提到,對稱加密(Symmetric Cryptography)的特點是加密和解密使用相同的密鑰。這種方式速度快、效率高,非常適合加密大量數據。

但是,它有一個致命的“阿喀琉斯之踵”——密鑰分發難題 (Key Distribution Problem)

想象一下,你想和遠在千里之外的朋友小紅進行秘密通信。你們約定使用對稱加密。那么問題來了:

  • 你怎么把這個共享的密鑰安全地告訴小紅呢?
    • 如果通過普通郵件或電話告訴她,那密鑰不就可能被竊聽了嗎?一旦密鑰泄露,你們所有的秘密通信都將暴露無遺。
    • 如果派專人護送密鑰,成本又太高,尤其是在需要和很多人進行秘密通信的場景下(比如一個電商網站需要和成千上萬的用戶建立安全連接)。

在互聯網這樣開放的環境中,安全地分發對稱密鑰是一個非常棘手的問題。這就好比你想給朋友一個保險箱的鑰匙,但你又不能當面給他,通過郵寄的方式又怕鑰匙被別人復制。

正是為了解決這個密鑰分發難題,以及實現一些對稱加密無法完成的功能(如數字簽名),公鑰密碼體制應運而生。

2. 公鑰密碼體制(非對稱加密)

公鑰密碼體制 (Public Key Cryptography),也稱為非對稱加密 (Asymmetric Cryptography),它的核心思想非常巧妙:使用一對密鑰,而不是單個密鑰。

這一對密鑰是數學上相關的,它們分別是:

  • 公鑰 (Public Key):顧名思義,這個密鑰是公開的。你可以把它告訴任何人,或者發布在互聯網上,就像公開你的郵箱地址或電話號碼一樣。
  • 私鑰 (Private Key):這個密鑰是秘密的,必須由密鑰的擁有者妥善保管,絕不能泄露給他人。就像你的銀行卡密碼一樣,只能自己知道。

工作原理:

這對密鑰的神奇之處在于它們的配對工作方式:

  1. 用于保密通信(加密/解密):

    • 發送者(比如你)想給接收者(比如小紅)發送一條秘密消息。
    • 你首先獲取小紅的公鑰(這個公鑰是公開的,你可以從小紅的網站、名片或者一個可信的目錄中得到)。
    • 你用小紅的公鑰加密你的消息。
    • 加密后的密文通過不安全的網絡(比如互聯網)發送給小紅。
    • 即使這個密文被黑客截獲,黑客沒有小紅的私鑰,也無法解密它。
    • 小紅收到密文后,使用她自己秘密保管的私鑰解密,就能得到原始消息。

    關鍵點:用某個公鑰加密的數據,只能用其配對的私鑰才能解密。

    • 生活化比喻:想象小紅有一個特制的保險箱(她的私鑰)和很多把只能鎖上這個保險箱但不能打開的“鎖”(她的公鑰)。她把這些“鎖”分發給所有想給她寄密信的人。你想給小紅寄密信,就找她要一把“鎖”,把信鎖好后寄給她。只有小紅用她自己保管的保險箱鑰匙(私鑰)才能打開看到信的內容。
  2. 用于數字簽名(身份驗證/完整性):

    • 發送者(比如你)想發送一條消息,并讓接收者(比如小紅)確信這條消息確實是你發的,并且沒有被篡改。
    • 你首先用自己的私鑰對消息(或者消息的哈希值,我們后面會講哈希)進行“簽名”(這本質上也是一種加密操作)。
    • 你把原始消息和這個“數字簽名”一起發送給小紅。
    • 小紅收到消息和簽名后,使用你的公鑰(這個公鑰是公開的)來驗證這個簽名。
    • 如果驗證成功,小紅就能確信:
      • 這條消息確實是你發送的(因為只有你擁有你的私鑰)。
      • 這條消息在傳輸過程中沒有被修改過(因為如果消息被改動,簽名驗證就會失敗)。

    關鍵點:用某個私鑰“簽名”(加密)的數據,可以用其配對的公鑰來“驗證”(解密)。

    • 生活化比喻:這就像你在文件上蓋上你獨一無二的私章(用私鑰簽名)。任何人都可以通過比對你預先公開備案的印章樣本(公鑰)來確認這個文件確實是你蓋的章,并且內容沒有被涂改。
3. 常見公鑰算法簡介

目前有很多成熟的公鑰加密算法,它們基于不同的數學難題(比如大數分解、離散對數問題)。這里介紹幾個最著名的:

  • RSA算法
    • 由三位密碼學家 Rivest, Shamir, Adleman 在1977年提出,是目前應用最廣泛的公鑰加密算法之一。
    • 其安全性基于大整數分解的困難性。簡單來說,就是給你兩個很大的素數,把它們乘起來很容易;但是給你它們的乘積,想反向分解出原來的兩個素數則非常非常困難。
    • 應用場景:數字簽名、密鑰交換(比如在TLS/SSL握手過程中交換對稱密鑰)、數據加密(雖然由于速度較慢,通常不直接用于加密大量數據,而是用于加密對稱密鑰)。
  • ECC(橢圓曲線密碼學 - Elliptic Curve Cryptography)
    • 一種基于橢圓曲線數學的公鑰加密方法。
    • 優勢:與RSA相比,ECC可以使用更短的密鑰長度達到同等的安全強度。這意味著更小的存儲空間、更快的計算速度和更低的帶寬消耗。因此,ECC在資源受限的設備(如智能手機、物聯網設備)和對性能要求較高的場景中越來越受歡迎。
    • 應用場景:比特幣等加密貨幣的密鑰生成和簽名、TLS/SSL、無線通信等。
  • Diffie-Hellman密鑰交換算法:嚴格來說,它不是一個加密算法,而是一個密鑰協商協議。它允許兩個從未見過面的人通過不安全的信道安全地協商出一個共享的對稱密鑰,然后他們就可以用這個對稱密鑰進行加密通信了。這是公鑰密碼學的開創性成果之一。
4. 公鑰基礎設施 (PKI - Public Key Infrastructure) 簡介

公鑰加密雖然解決了密鑰分發問題,但也引入了一個新的問題:我怎么能確定我拿到的這個公鑰確實是小紅的,而不是冒名頂替的黑客的呢? 如果黑客偽造了小紅的公鑰給你,你用這個假公鑰加密了信息,那么黑客就能用他對應的假私鑰解密你的信息了!

為了解決公鑰的信任問題,公鑰基礎設施 (PKI) 應運而生。PKI 是一套由硬件、軟件、策略、流程和人員組成的體系,用于創建、管理、分發、使用、存儲和撤銷數字證書 (Digital Certificates)

  • 數字證書:可以把它想象成一個數字身份證。它由一個受信任的證書頒發機構 (CA - Certificate Authority) 簽發,將一個公鑰與一個實體(如個人、組織、網站服務器)的身份信息綁定在一起。
    • 證書中包含了公鑰本身、公鑰所有者的信息、CA的數字簽名等。
  • 證書頒發機構 (CA):是一個可信任的第三方機構,負責驗證申請者的身份,并為其簽發數字證書。例如,VeriSign (現在是DigiCert的一部分), Let’s Encrypt 等都是著名的CA。

當你訪問一個使用HTTPS的網站(比如銀行網站)時,你的瀏覽器會自動檢查該網站的數字證書。如果證書是由一個受信任的CA簽發的,并且證書有效,瀏覽器就會認為這個網站的公鑰是可信的,然后才會用這個公鑰進行后續的安全通信。

5. 應用場景

公鑰加密技術已經深深融入我們數字生活的方方面面:

  • HTTPS/TLS/SSL 安全通信:你每次在瀏覽器地址欄看到 https:// 和小鎖圖標,背后都是公鑰加密在發揮作用,確保你與網站之間的數據傳輸是加密和認證的。
  • 數字簽名與身份驗證:用于驗證軟件更新的來源、電子文檔的真實性、用戶的登錄憑證等。
  • 安全電子郵件 (PGP/GPEP - Pretty Good Privacy / GNU Privacy Guard):允許用戶加密和簽名他們的電子郵件,確保郵件內容的保密性和發件人的真實性。
  • 安全外殼協議 (SSH):系統管理員經常使用SSH遠程登錄服務器,SSH也使用公鑰加密進行身份驗證和安全通信。
  • 加密貨幣:比特幣、以太坊等加密貨幣的交易和錢包地址都依賴于公鑰加密技術。

思考題:

  1. 小明想給小紅發送一封加密郵件。他應該使用誰的公鑰來加密郵件?小紅收到郵件后,應該使用誰的私鑰來解密?
  2. 如果一個網站聲稱自己是某銀行的官方網站,你如何通過數字證書來初步判斷它的可信度?(提示:可以想想CA的角色)
  3. 為什么說RSA算法的安全性依賴于大數分解的困難性?你能用自己的話解釋一下嗎?

太棒了!很高興大家對公鑰加密的知識點掌握得這么好!

現在,我們已經了解了對稱加密和非對稱加密。接下來,我們要學習一個與它們都不同,但在信息安全領域同樣扮演著關鍵角色的技術——哈希函數 (Hashing Functions)


第三部分:哈希基礎 (Hashing Basics)

1. 什么是哈希函數?

想象一下,你有一本很厚的小說,你想給這本書生成一個簡短的、獨一無二的“指紋”,通過這個“指紋”就能快速識別這本書,并且如果書的內容有任何微小的改動(比如增刪了一個字),這個“指紋”就會變得完全不同。哈希函數做的就是類似的事情。

哈希函數 (Hash Function),也常被稱為散列函數,是一種數學函數,它可以將任意長度的輸入數據(比如一段文字、一個文件、一張圖片,甚至整個數據庫)通過一個固定的計算過程,轉換為一個固定長度的輸出字符串。這個輸出字符串就被稱為哈希值 (Hash Value)哈希碼 (Hash Code)摘要 (Digest)指紋 (Fingerprint)

哈希函數的重要特性:

一個優秀的哈希函數通常具備以下幾個關鍵特性,這些特性使得它們在各種應用中非常有用:

  • 單向性 (One-way Property) / 不可逆性 (Irreversibility)
    • 從原始輸入數據計算出哈希值非常容易(計算速度快)。
    • 但是,從哈希值反向推導出原始輸入數據在計算上是極其困難的,甚至是不可行的。也就是說,你不能輕易地從“指紋”還原出整本書的內容。
    • 生活化比喻:就像把雞蛋打散做成炒雞蛋很容易,但想把炒雞蛋完美地還原成原來的生雞蛋幾乎不可能。
  • 確定性 (Deterministic)
    • 對于相同的輸入數據,無論你計算多少次,哈希函數總是產生完全相同的哈希值
    • 生活化比喻:同一本書,無論你用同一種指紋提取技術提取多少次,得到的指紋都應該是一樣的。
  • 雪崩效應 (Avalanche Effect) / 高靈敏性
    • 原始輸入數據即使發生非常微小的變化(比如修改了一個比特位,或一個字符),其計算出的哈希值也會發生巨大且不可預測的變化,看起來與原來的哈希值毫無關聯。
    • 生活化比喻:書中的一個標點符號改了,提取出來的“指紋”就會變得面目全非。
  • 抗碰撞性 (Collision Resistance)
    • 理想情況下,不同的輸入數據應該產生不同的哈希值。如果兩個不同的輸入數據產生了相同的哈希值,就稱之為一個“碰撞 (Collision)”。
    • 弱抗碰撞性 (Weak Collision Resistance):對于一個給定的輸入數據 x,要找到另一個不同的輸入數據 y,使得 hash(x) = hash(y),在計算上是困難的。
    • 強抗碰撞性 (Strong Collision Resistance):要找到任意兩個不同的輸入數據 xy,使得 hash(x) = hash(y),在計算上是困難的。
    • 生活化比喻:很難找到兩本內容完全不同的書,它們卻擁有完全相同的“指紋”。(雖然理論上由于輸出長度固定而輸入無限,碰撞是可能存在的,但對于好的哈希算法,找到碰撞的概率極低,成本極高。)
2. 哈希函數與加密的區別

這是一個非常重要的區分點,初學者很容易混淆:

特性哈希函數 (Hashing)加密 (Encryption)
目的主要用于驗證數據的完整性唯一性主要用于保護數據的保密性
可逆性不可逆 (單向)可逆 (有對應的解密過程)
密鑰通常不需要密鑰需要密鑰 (對稱密鑰或公私鑰對)
輸出長度固定長度通常與輸入長度相關或更長
用途舉例文件校驗和、密碼存儲、數字簽名中的摘要安全通信 (HTTPS)、數據存儲加密、磁盤加密等

簡單來說:

  • 加密是為了讓信息不被別人看懂,但授權的人可以用密鑰恢復原始信息。
  • 哈希是為了給信息生成一個“指紋”,主要用來檢查信息有沒有被改動過,或者快速比較兩個信息是否相同,但你不能從指紋恢復出原始信息。
3. 常見哈希算法

歷史上出現過很多哈希算法,有些隨著技術發展和安全分析的深入,已經被認為不再安全。以下是一些知名的哈希算法:

  • MD5 (Message Digest 5)
    • 由Ronald Rivest在1991年設計,產生一個128位(16字節)的哈希值。
    • 曾經非常流行,廣泛用于文件校驗、密碼存儲等。
    • 安全缺陷:MD5已經被證明存在嚴重的碰撞漏洞,意味著可以相對容易地找到兩個不同的輸入產生相同的MD5哈希值。因此,MD5不再適用于對安全性要求高的場景,例如SSL證書簽名或數字簽名。但對于非安全關鍵的應用,如文件完整性校驗(檢查文件下載是否損壞),有時仍在使用。
  • SHA系列 (Secure Hash Algorithm):由美國國家安全局(NSA)設計,并由美國國家標準與技術研究院(NIST)發布的一系列哈希算法。
    • SHA-0:早期版本,很快被發現存在缺陷并被SHA-1取代。
    • SHA-1:產生一個160位(20字節)的哈希值。也曾廣泛使用,但與MD5類似,SHA-1也已被發現存在碰撞攻擊的風險,雖然比MD5更難。目前也不推薦用于新的安全應用
    • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256):這是一組更強大的哈希函數,分別產生不同長度的哈希值(例如,SHA-256產生256位哈希值)。目前,SHA-256是應用最廣泛且被認為是安全的哈希算法之一,用于數字簽名、區塊鏈(如比特幣)、TLS/SSL證書等多種安全應用。
    • SHA-3 (Keccak):在2015年正式發布的最新一代哈希算法標準。它采用了與SHA-1和SHA-2不同的內部結構(海綿結構),旨在提供一種不同于以往算法的安全替代方案。目前正在逐步推廣應用。

選擇哪種哈希算法取決于具體的安全需求和應用場景。一般來說,推薦使用SHA-2系列(如SHA-256)或SHA-3。

4. 哈希函數的應用

哈希函數的獨特性質使其在計算機科學和信息安全領域有著極其廣泛的應用:

  • 密碼存儲 (Password Storage)
    • 網站或系統通常不會直接存儲用戶的明文密碼,因為一旦數據庫泄露,所有用戶密碼都會暴露。
    • 正確的做法是存儲用戶密碼的哈希值。當用戶登錄時,系統計算用戶輸入密碼的哈希值,并與數據庫中存儲的哈希值進行比較。如果匹配,則認證通過。
    • 為了進一步增強安全性,通常還會使用“加鹽 (Salting)”技術:在計算密碼哈希之前,為每個用戶的密碼附加一個隨機生成的字符串(鹽值),然后再進行哈希。這樣即使兩個用戶設置了相同的密碼,由于鹽值不同,它們存儲的哈希值也會不同,可以有效抵御彩虹表攻擊 (Rainbow Table Attack)。
  • 數據完整性校驗 (Data Integrity Verification)
    • 當你從網站下載一個大文件(如操作系統鏡像、大型軟件安裝包)時,網站通常會提供該文件的哈希值(如MD5或SHA-256校驗和)。
    • 下載完成后,你可以在本地計算下載文件的哈希值,并與網站提供的哈希值進行比較。如果兩者一致,說明文件在下載過程中沒有損壞或被篡改。
  • 數字簽名 (Digital Signatures)
    • 在公鑰加密中,如果要對一個大文件進行簽名,直接用私鑰加密整個文件會非常慢。
    • 通常的做法是:先計算文件的哈希值(得到一個固定長度的摘要),然后用發送者的私鑰對這個哈希值進行加密(簽名)。
    • 接收者收到文件和簽名后,用發送者的公鑰解密簽名得到原始哈希值,同時自己計算接收到文件的哈希值,比較兩者是否一致。
  • 區塊鏈 (Blockchain)
    • 區塊鏈技術(如比特幣)的核心組成部分就是哈希函數。
    • 每個區塊都包含前一個區塊的哈希值,形成一個鏈式結構,確保了數據的不可篡改性。交易數據也通過哈希進行組織和驗證。
  • 數據索引與查找
    • 哈希表(Hash Table)或散列表是一種常用的數據結構,它利用哈希函數將鍵(Key)映射到表中的一個位置,以加快查找速度。

思考題:

  1. 為什么在存儲用戶密碼時,僅僅使用哈希函數還不夠安全,通常還需要“加鹽”?
  2. 小明下載了一個軟件,網站提供了該軟件的SHA-256校驗和。小明應該如何操作來驗證他下載的軟件是否完整且未經篡改?
  3. 哈希函數能用于加密數據嗎?為什么?

有一點沒懂,非對稱加密 rsa 和對稱加密Diffie-Hellman的區別?不都是交換公鑰嗎?

非常好的問題!確實,RSA和Diffie-Hellman都涉及到“公鑰”的概念,但它們的目的和工作方式有顯著的區別。讓我們來梳理一下:

首先,澄清一個常見的誤解:

  • RSA (Rivest-Shamir-Adleman) 是一種 非對稱加密算法。它確實使用公鑰和私鑰對。它的主要用途是:
    1. 加密/解密:用公鑰加密數據,用對應的私鑰解密。
    2. 數字簽名:用私鑰簽名數據,用公鑰驗證簽名。
  • Diffie-Hellman (DH) 本身 不是一個加密算法,而是一個 密鑰交換協議。它的核心目標是讓通信雙方在不安全的信道上安全地協商出一個共享的密鑰(通常是對稱密鑰),然后雙方可以使用這個共享密鑰通過對稱加密算法(如AES)進行后續的保密通信。

核心區別:

  1. 目的不同:

    • RSA:可以直接用于加密少量數據(如會話密鑰)或進行身份認證(通過數字簽名)。
    • Diffie-Hellman專門用于安全地生成一個共享密鑰,它本身不執行數據加密。
  2. “公鑰”的含義和使用方式不同:

    • RSA中的公鑰
      • 用于加密:任何人都可以獲取接收方的公鑰,用它加密信息,只有持有對應私鑰的接收方才能解密。
      • 用于驗證簽名:任何人都可以獲取簽名者的公鑰,用它驗證簽名的真實性和數據的完整性。
      • 公鑰是直接分發的,比如通過數字證書。
    • Diffie-Hellman中交換的“公開值”
      • 雙方各自生成一個私有值(秘密數字)和一個公開值(基于私有值和一組公共參數計算得出)。
      • 他們交換的是這些“公開值”。
      • 然后,每一方結合自己的私有值和對方的公開值,通過特定的數學運算,可以獨立計算出完全相同的共享密鑰
      • 關鍵在于:這個最終的共享密鑰從未在信道中直接傳輸過。即使攻擊者截獲了雙方交換的公開值和公共參數,也無法輕易計算出這個共享密鑰(這依賴于離散對數問題的困難性)。
  3. 是否直接加密數據:

    • RSA:可以。例如,A可以用B的公鑰加密一個對稱密鑰,然后發送給B。B用自己的私鑰解密得到對稱密鑰,之后雙方用此對稱密鑰通信。
    • Diffie-Hellman:不可以。它只負責生成共享密鑰。數據加密需要依賴其他對稱加密算法。

總結一下“不都是交換公鑰嗎?”這個問題:

  • RSA 中,一方(比如服務器)會將其 公鑰 發送給另一方(比如客戶端)。客戶端用這個公鑰加密信息(比如一個預主密鑰,用于后續生成對稱密鑰)。
  • Diffie-Hellman 中,雙方交換的是根據各自私鑰計算出的 公開參數/值,而不是直接意義上的“用于加密的公鑰”。它們利用這些交換的公開值和自己的私鑰來獨立推導出同一個共享秘密。

一個簡單的比喻:

  • RSA (用于加密會話密鑰)
    • Alice想給Bob寄一個秘密盒子(對稱密鑰)。
    • Bob先把一個打開的保險箱(Bob的公鑰)寄給Alice。
    • Alice把秘密盒子放進Bob的保險箱,鎖上(用Bob的公鑰加密)。
    • Alice把鎖上的保險箱寄回給Bob。
    • 只有Bob有鑰匙(Bob的私鑰)能打開這個保險箱,取出秘密盒子。
  • Diffie-Hellman (密鑰交換)
    • Alice和Bob想共同調配出一種只有他們兩人知道的秘密顏色油漆(共享密鑰)。
    • 他們先公開商定一種基礎顏色(公共參數)。
    • Alice選一種自己的秘密顏色,和基礎顏色混合,把混合后的顏色公開給Bob。
    • Bob也選一種自己的秘密顏色,和基礎顏色混合,把混合后的顏色公開給Alice。
    • 現在,Alice用Bob給她的混合顏色,再混合上自己最初的秘密顏色。
    • Bob用Alice給他的混合顏色,再混合上自己最初的秘密顏色。
    • 神奇的是,他們最終得到的油漆顏色是完全一樣的!而偷聽者即使知道基礎顏色和他們交換的混合顏色,也很難知道他們各自的秘密顏色,以及最終的共享顏色。

所以,雖然都涉及公開信息的交換,但RSA是直接用對方的公鑰進行操作(加密或驗證),而Diffie-Hellman是通過交換計算出的公開值來共同派生出一個秘密,這個秘密本身不被直接傳輸。


太棒了!同學們,看到大家對密碼學、公鑰加密和哈希函數都有了扎實的理解,我感到非常欣慰!這些都是我們數字世界安全的基石。

現在,我們已經掌握了足夠的理論知識,是時候進入更具實踐性的部分了——學習如何使用 John the Ripper (JtR) 這款強大的密碼破解與審計工具。請注意,我們學習這個工具的目的是為了更好地理解密碼安全和進行合法的安全測試,嚴禁用于任何非法用途


第四部分:John the Ripper 工具使用

1. 什么是 John the Ripper (JtR)?

John the Ripper,通常簡稱為 JtRJohn,是一款非常著名且功能強大的開源密碼破解(或稱為密碼恢復/審計)工具

  • 它的主要用途是什么?
    • 密碼安全審計:系統管理員可以使用JtR來檢測系統中的弱密碼,提醒用戶修改,從而增強整體安全性。
    • 密碼恢復:在合法授權的情況下,幫助用戶恢復忘記的密碼(例如,從自己系統的密碼哈希中恢復)。
    • 安全研究與教育:幫助安全研究人員和學生理解密碼破解的原理和不同密碼方案的強度。
  • 它能破解哪些類型的密碼?
    • JtR支持破解種類繁多的密碼哈希和加密格式。這包括但不限于:
      • 各種Unix風格的密碼哈希 (如 DES, MD5, SHA-crypt, Blowfish-crypt 等,通常存儲在 /etc/shadow 文件中)。
      • Windows LM 和 NTLM 哈希 (用于Windows用戶賬戶密碼)。
      • 各種應用程序的密碼哈希 (如數據庫、Web應用、Office文檔、壓縮文件如ZIP/RAR等)。
      • 網絡協議中的認證哈希 (如 Kerberos, LDAP)。
      • 甚至一些較弱的加密密鑰。
    • JtR通過其模塊化的設計,可以支持非常多的格式,并且社區也在不斷為其添加新的格式支持。
  • 支持的操作系統
    • JtR最初是為Unix系統設計的,但現在它是一個跨平臺的工具,可以在多種操作系統上運行,包括:
      • Linux (各種發行版)
      • macOS
      • Windows
      • 以及其他類Unix系統 (如 *BSD, Solaris等)。
2. 安裝 John the Ripper

JtR的安裝方式因操作系統而異。通常有兩種主要的JtR版本:

  • Core John (核心版):這是官方發布的穩定版本,包含了主要的破解功能和格式支持。
  • Jumbo John (社區增強版):這是一個由社區維護和增強的版本,通常包含更多最新的破解格式、優化和功能。對于大多數用戶來說,推薦使用 Jumbo John,因為它功能更全面。

安裝方法概述:

  • Linux (如 Debian/Ubuntu):
    sudo apt update
    sudo apt install john
    
    這通常安裝的是核心版或一個較舊的Jumbo版。為了獲取最新的Jumbo版,你可能需要從源碼編譯安裝,或者查找特定發行版的社區倉庫。
  • Linux (從源碼編譯 Jumbo John - 推薦方式):
    1. 訪問 John the Ripper 社區版 (Jumbo) 的 GitHub 頁面。
    2. 下載最新的源碼包 (通常是 .tar.gz.zip 文件) 或使用 git clone
    3. 解壓源碼包,進入 src 目錄。
    4. 運行 ./configuremake -s clean && make -sj4 (這里的 4 是你的CPU核心數,可以調整)。
    5. 編譯完成后,可執行文件通常在 run 目錄下 (如 john)。
  • macOS:
    • 可以使用 Homebrew 包管理器安裝:
      brew install john
      
      或者,為了獲得Jumbo版,可以使用:
      brew install john-jumbo
      
    • 同樣也可以從源碼編譯安裝。
  • Windows:
    • 可以從 John the Ripper 官方網站 或 Jumbo John 的 GitHub 發布頁面下載預編譯的Windows二進制包 (通常是 .zip 文件)。
    • 解壓后,在 run 目錄下找到 john.exe 即可運行。

驗證安裝:

安裝完成后,你可以在命令行中運行以下命令來檢查JtR是否成功安裝并查看其版本信息:

cd path/to/john/run  # 進入JtR的運行目錄
./john --version     # Linux/macOS
# john.exe --version # Windows
3. JtR 的基本工作流程

使用JtR破解密碼通常遵循以下步驟:

  1. 準備密碼哈希文件 (Input File)
    • 首先,你需要獲取你想要破解的密碼的哈希值。這些哈希值必須以JtR能夠識別的格式存放在一個文本文件中。
    • 例如,對于Linux系統,你可能需要從 /etc/shadow 文件中提取用戶賬戶信息(這通常需要root權限)。對于Windows,可能需要從SAM數據庫中提取NTLM哈希。
    • JtR自帶了一些工具(如 unshadow 用于合并 /etc/passwd/etc/shadowpwdump 的變種用于Windows)來幫助你準備這些哈希文件。
    • 重要提示:獲取密碼哈希通常需要相應的權限,并且必須在合法授權的情況下進行。
  2. 選擇破解模式 (Cracking Mode)
    • JtR提供了多種破解模式,以適應不同的情況和密碼復雜度。我們稍后會詳細介紹這些模式。
  3. 運行破解 (Run John)
    • 執行 john 命令,指定哈希文件和選擇的破解模式(或讓JtR自動嘗試)。
  4. 查看破解結果 (Show Cracked Passwords)
    • JtR會將成功破解的密碼保存在一個名為 john.pot (POT代表Potentially Cracked Passwords) 的文件中,該文件位于JtR的運行目錄或用戶的主目錄下。
    • 你可以使用 john --show <hash_file> 命令來顯示已破解的密碼。
4. JtR 的主要破解模式

JtR的強大之處在于其靈活的破解模式。以下是幾種最主要的模式:

  • 單一破解模式 (Single Crack Mode / -single)
    • 這是JtR默認會嘗試的模式之一,速度非常快。
    • 它會利用哈希文件中提供的額外信息(如用戶名、GECOS字段中的全名、家目錄等)來生成候選密碼。
    • 例如,如果用戶是 jsmith,JtR會嘗試 jsmith, smith, john, j0hn 等變體。
    • 它還會應用一些常見的密碼變換規則。
    • 命令示例:./john my_hashes.txt -single (通常JtR會自動嘗試此模式,無需顯式指定)
  • 字典破解模式 (Wordlist Mode / --wordlist=<file>)
    • 這是最常用也是非常有效的破解模式之一。
    • 你需要提供一個密碼字典文件 (Wordlist),這個文件包含大量可能的密碼(每行一個)。互聯網上有很多公開的密碼字典,你也可以創建自己的字典。
    • JtR會逐一嘗試字典中的每個詞作為密碼。
    • 規則引擎 (Rules):為了提高字典破解的效率,JtR擁有一個強大的規則引擎 (--rules)。這些規則可以對字典中的詞進行各種變換,如大小寫轉換、添加數字或符號、顛倒順序、組合詞語等,從而生成更多候選密碼。
      • 例如,如果字典詞是 password,規則可以生成 Password, password123, p@$$wOrd, drowssap 等。
    • 命令示例:
      ./john --wordlist=/path/to/password.lst my_hashes.txt
      ./john --wordlist=/path/to/password.lst --rules my_hashes.txt
      
  • 增量破解模式 (Incremental Mode / -i--incremental=<type>)
    • 這種模式會嘗試所有可能的字符組合,類似于暴力破解 (Brute-force Attack),但JtR的增量模式更智能,它會基于字符頻率和密碼長度進行優化。
    • 你可以指定字符集類型 (<type>),如 All (所有可打印ASCII字符), Digits (數字), Alpha (字母), Alnum (字母和數字) 等,或者自定義字符集。
    • 這種模式通常非常耗時,尤其是對于長而復雜的密碼,但如果其他模式失敗,它可能是最后的手段。
    • 命令示例:
      ./john -i=Digits my_hashes.txt  # 只嘗試數字密碼
      ./john -i=Alnum my_hashes.txt   # 嘗試字母和數字組合
      ./john -i my_hashes.txt         # 嘗試默認的增量模式
      
  • 外部模式 (External Mode):允許用戶通過C語言編寫自定義的破解邏輯,非常靈活但需要編程知識。
  • 掩碼模式 (Mask Mode / --mask=<mask>):Jumbo John 支持的一種高級暴力破解模式,允許你定義密碼的結構(掩碼),例如你知道密碼是8位,前4位是小寫字母,后4位是數字,可以大大縮小搜索空間。

JtR通常會按一定順序自動嘗試這些模式(Single -> Wordlist (使用默認password.lst) -> Incremental)。

5. 常用命令與選項

以下是一些JtR常用的命令和選項:

  • 基本運行
    ./john my_password_hashes.txt
    
    JtR會自動檢測哈希類型并嘗試默認的破解模式。
  • 指定哈希格式 (--format=<type>)
    • 如果JtR無法自動識別哈希類型,或者一個哈希文件中有多種類型的哈希,你可以手動指定。
    • 例如:--format=nt (Windows NTLM哈希), --format=raw-md5 (純MD5哈希), --format=sha256crypt (Linux SHA256哈希)。
    • 你可以運行 ./john --list=formats 查看支持的所有格式。
    ./john --format=raw-md5 my_md5_hashes.txt
    
  • 顯示已破解的密碼 (--show)
    ./john --show my_password_hashes.txt
    
    這會從 john.pot 文件中讀取并顯示與 my_password_hashes.txt 文件相關的已破解密碼。
  • 指定會話名稱 (--session=<name>)
    • 允許你為破解過程命名一個會話。這對于暫停和恢復長時間的破解任務非常有用。
    ./john --session=my_session --wordlist=rockyou.txt my_hashes.txt
    
  • 恢復會話 (--restore=<name>)
    • 如果破解過程意外中斷(或你手動停止),可以使用此命令恢復。
    ./john --restore=my_session
    
  • 使用多核心 (--fork=<N>)
    • 利用多CPU核心并行破解,顯著提高速度。
    ./john --fork=4 --wordlist=rockyou.txt my_hashes.txt # 使用4個核心
    
  • 列出支持的格式/子格式/選項等 (--list=...)
    • --list=formats:列出所有支持的哈希格式。
    • --list=rules:列出當前配置的規則。
    • --list=incremental-modes:列出可用的增量模式。
6. 獲取密碼哈希 (簡述與提醒)

再次強調,獲取密碼哈希必須在合法授權的前提下進行。

  • Linux:用戶密碼哈希通常存儲在 /etc/shadow 文件中。你需要root權限才能讀取它。通常使用 unshadow /etc/passwd /etc/shadow > my_hashes.txt 命令將其轉換為JtR可直接使用的格式。
  • Windows:用戶密碼哈希(LM哈希 - 已過時但可能存在,NTLM哈希 - 仍在使用)存儲在安全賬戶管理器 (SAM) 數據庫中。直接訪問SAM文件非常困難,通常需要使用專門的工具(如 pwdump, fgdump, Mimikatz等,或通過離線方式從系統備份中提取)來導出哈希。這些操作通常需要管理員權限。
  • 應用程序哈希:許多應用程序(如數據庫、Web框架、壓縮軟件)使用自己的方式存儲密碼哈希。你需要查閱相關文檔或使用特定工具來提取這些哈希。
    • 例如,一個Web應用的數據庫中可能有一個 users 表,其中 password 字段存儲了用戶密碼的MD5或SHA256哈希。
7. 實踐案例 (概念性)

讓我們通過幾個概念性的例子來理解JtR的用法:

  • 案例1:破解一個簡單的Linux密碼哈希文件 linux_hashes.txt
    # 假設 linux_hashes.txt 內容類似 (實際格式更復雜):
    # user1:$1$salt$hashed_password
    # user2:$6$salt$hashed_password./john linux_hashes.txt # JtR自動檢測格式并開始破解# 等待一段時間后,查看結果
    ./john --show linux_hashes.txt
    
  • 案例2:破解一個包含純MD5哈希的文件 md5_list.txt,使用字典 common_passwords.txt
    # 假設 md5_list.txt 內容 (每行一個MD5哈希):
    # 5f4dcc3b5aa765d61d8327deb882cf99
    # e10adc3949ba59abbe56e057f20f883e./john --format=raw-md5 --wordlist=common_passwords.txt md5_list.txt# 查看結果
    ./john --show --format=raw-md5 md5_list.txt
    
8. 道德與法律

極其重要:

  • 合法授權:使用John the Ripper或任何密碼破解工具,必須獲得目標系統或數據的明確授權。未經授權的密碼破解是非法行為,可能導致嚴重的法律后果。
  • 道德使用:學習和使用這些工具的目的是為了更好地理解安全風險,從而加強防護,而不是用于惡意攻擊。
  • 密碼安全的重要性:通過學習密碼破解,我們更能體會到設置強密碼的重要性。一個強密碼應該足夠長,包含大小寫字母、數字和特殊符號,并且不容易被猜到。此外,多因素認證 (MFA) 也是保護賬戶安全的重要手段。

思考題:

  1. John the Ripper 的“單一破解模式”和“字典破解模式”有什么主要區別?它們各自的優勢是什么?
  2. 為什么在進行字典破解時,使用“規則引擎”可以大大提高破解成功率?
  3. 如果你忘記了自己Linux系統的登錄密碼(并且你有物理訪問權限和root權限),理論上你可以如何利用John the Ripper來嘗試恢復它?(簡述思路,并強調前提條件)
  4. 除了技術層面,使用密碼破解工具還需要考慮哪些重要因素?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907050.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis入門:快速搭建數據庫操作框架 + 增刪改查(CRUD)

一、創建Mybatis的項目 Mybatis 是?個持久層框架, 具體的數據存儲和數據操作還是在MySQL中操作的, 所以需要添加MySQL驅動 1.添加依賴 或者 手動添加依賴 <!--Mybatis 依賴包--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactI…

基于Ubuntu的ros版本切換

解決在同一個虛擬機中管理兩個不同版本的ros 基于Ubuntu&#xff08;20.04&#xff09; ros版本1和版本2的切換 前期準備&#xff1a;已經在Ubuntu中安裝了兩個版本的ros&#xff0c;這里以版本1的noetic和版本2的foxy為例 在bashrc中&#xff1a; # ~/.bashrc: executed by…

vue2:橫向無限輪播

子組件 <template><div class"infinite-scroll" ref"scrollContainer"><div class"scroll-content" :style"{ transform: translateX(${scrollPosition}px) }"><div v-for"(item, index) in displayItems&q…

CVE-2021-44228源碼分析與漏洞復現

漏洞概述 漏洞名稱&#xff1a;Apache Log4j2 遠程代碼執行漏洞 漏洞編號&#xff1a;CVE-2021-44228 CVSS 評分&#xff1a;10.0 影響版本&#xff1a;Apache Log4j 2.0-beta9 至 2.14.1 修復版本&#xff1a;2.15.0、2.16.0 CVE-2021-44228 是 Apache Log4j2 日志框架中因 …

2025年Google I/O大會上,谷歌展示了一系列旨在提升開發效率與Web體驗的全新功能

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【C++指南】string(三):basic_string底層原理與模擬實現詳解

. &#x1f493; 博客主頁&#xff1a;倔強的石頭的CSDN主頁 &#x1f4dd;Gitee主頁&#xff1a;倔強的石頭的gitee主頁 ? 文章專欄&#xff1a;《C指南》 期待您的關注 文章目錄 引言一、成員變量與內存管理1.1 核心成員變量1.2 內存分配策略 二、默認成員函數的實現與優化…

AWS云與第三方通信最佳實踐:安全、高效的數據交互方案

引言 在當今的云計算時代,企業經常需要在AWS云環境中存儲和處理數據,同時還需要與第三方應用或服務進行數據交互。如何安全、高效地實現這種通信是許多企業面臨的挑戰。本文將詳細探討幾種AWS云與第三方通信的方案,并分析它們的優缺點,幫助您為自己的業務場景選擇最佳解決…

AE THYRO-AX 功率控制器 THYRISTOR-LEISTUNGSSTELLER THYRISTOR POWER CONTROLLER

AE THYRO-AX 功率控制器 THYRISTOR-LEISTUNGSSTELLER THYRISTOR POWER CONTROLLER

【論文解讀】STaR:不用人類思維鏈指導,模型可以自我進化!

1st author: Eric Zelikman paper: STaR: Bootstrapping Reasoning With Reasoning | OpenReview NeurIPS 2022 code: ezelikman/STaR: Code for STaR: Bootstrapping Reasoning With Reasoning (NeurIPS 2022) 1. 當語言模型學會自我進化 Zelikman 等人提出的 STaR (Self-T…

大語言模型 19 - MCP FastAPI-MCP 實現自己的MCP服務 快速接入API

MCP 基本介紹 官方地址&#xff1a; https://modelcontextprotocol.io/introduction “MCP 是一種開放協議&#xff0c;旨在標準化應用程序向大型語言模型&#xff08;LLM&#xff09;提供上下文的方式。可以把 MCP 想象成 AI 應用程序的 USB-C 接口。就像 USB-C 提供了一種…

用Matlab對單目相機參數的標定步驟(保姆級教程)

前言 在圖像測量及機器視覺應用中&#xff0c;為確定空間物體表面某點的三維幾何位置與其在圖像中對應點之間的相互關系&#xff0c;必須建立相機成像的幾何模型&#xff0c;這些幾何模型參數就是相機參數。 ??在大多數條件下這些參數必須通過實驗與計算才能得到&#xff…

【后端高階面經:架構篇】46、分布式架構:如何應對高并發的用戶請求

一、架構設計原則:構建可擴展的系統基石 在分布式系統中,高并發場景對架構設計提出了極高要求。 分層解耦與模塊化是應對復雜業務的核心策略,通過將系統劃分為客戶端、CDN/邊緣節點、API網關、微服務集群、緩存層和數據庫層等多個層次,實現各模塊的獨立演進與維護。 1.1 …

SQL每日一題(5)

前言&#xff1a;五更&#xff01;五更琉璃&#xff01;不對&#xff01;是&#xff0c;五更佩可&#xff01; 原始數據&#xff1a; new_hires reasonother_column1other_column2校園招聘信息 11社會招聘信息 22內部推薦信息 33獵頭推薦信息 44校園招聘信息 55社會招聘信息…

Kafka Kraft模式集群 + ssl

文章目錄 啟用集群資源規劃準備證書創建相關文件夾配置文件啟動各Kafka節點 故障轉移測試spring boot集成 啟用集群 配置集群時關鍵就是提前梳理好需要的網絡資源&#xff0c;完成對應server.properties文件的配置。在執行前先把這些梳理好&#xff0c;可以方便后面的配置&…

watchEffect

在處理復雜異步邏輯時&#xff0c;Vue 3 的 watchEffect 相比傳統的 watch 具有以下優勢&#xff1a; 1. 自動追蹤依賴 watchEffect 會自動收集其回調中使用的所有響應式依賴&#xff0c;無需手動指定監聽源&#xff1a; import { ref, watchEffect } from vue;const count …

Linux系統平均負載與top、uptime命令詳解

介紹 在Linux系統運維中&#xff0c;系統平均負載是一個重要的性能指標。通過 top和 uptime命令&#xff0c;可以實時監控系統的負載情況&#xff0c;幫助運維人員及時發現并解決系統性能問題。本文將詳細介紹Linux系統平均負載的概念及其計算方法&#xff0c;并深入解析 top和…

前端配置nginx代理

一、定義靜態文件的路徑的兩種方式 1. root 指令 &#xff08;1&#xff09;作用 指定文件系統的 基礎路徑&#xff0c;location 的 URI 會 追加到該路徑后 形成完整路徑。 &#xff08;2&#xff09;語法 location /uri/ {root /path/to/files; } &#xff08;3&#xf…

語音識別技術在人工智能中的應用

姓名&#xff1a;成杰 學號&#xff1a;21021210653 學院&#xff1a;電子工程學院 【嵌牛導讀】 應用語音智能這項識別技術是為了使計算機可以聽懂人類的語言&#xff0c;并執行人類的某項操作。現階段這項技術已經成為人工智能領域的重點研究方向和實現人機語音交互的…

uniapp實現大視頻文件上傳-- 阿里云oss直傳方式 - app、H5、微信小程序

之前的項目文件上傳比較慢&#xff0c;使用預簽名方式上傳H5正常&#xff0c;微信小程序和app使用axios時出現了各種報錯&#xff0c;配置完后還是不行。所以換一種oss直傳方式。 找到一個 實現了的 參考:https://blog.csdn.net/qq_44860866/article/details/129670188

【Java學習筆記】抽象類

抽象類 引入關鍵字&#xff1a;abstract 應用場景&#xff1a;當子類中共有的部分 / 特性可以放到抽象類中 1. 通過子類的方法重寫實現不同的功能 2. 編寫一個方法把共有的部分放入其中&#xff0c;在該方法中調用抽象方法&#xff08;動態綁定機制&#xff09; 3. 便可以實…