公鑰加密
這篇文章討論了PGP或“很好的隱私”。 PGP是常規加密和公用密鑰加密的混合實現。 在詳細介紹PGP之前,讓我們先談談公鑰加密。
與其他任何加密技術一樣,公鑰加密解決了通過不安全介質傳輸安全數據的問題。 即互聯網。 結果,該方案的目的是發送數據,以便只有預期的收件人才能閱讀。
它通過使用非對稱密鑰加密來完成此任務。 它使用一對密鑰進行加密:一個公共密鑰,用于加密來自發送方的數據;一個“相應的”私有密鑰,用于在接收端解密數據。 這些公鑰/私鑰在數學上是鏈接的,但已生成,因此它們都不是從對方的知識派生而來(在計算上可行的)。 至少要等到最快的計算機出現在時間的盡頭。 密鑰基于數學關系(最著名的是整數分解和離散對數問題)。 但是,隨著計算速度的加快,加密算法將始終需要變得更加復雜。
綜上所述,公鑰已發布并可用。 它使任何人都可以使用公鑰加密數據,但是只有擁有私鑰的一方才能解密數據。 公鑰密碼術的一大好處是,由于所有通信僅涉及公鑰,并且從未傳輸或共享私鑰,因此它使沒有預先存在的安全性安排的各方能夠以安全的方式交換消息。 公鑰系統的一些常見示例是RSA(Rivest,Shamir和Adleman)和DSA(數字簽名算法)。
PGP
PGP由Phil Zimmermann于1991年創建,是一種混合的公共密鑰加密/常規方案,其功能有所不同。 首先壓縮明文或純文本形式的郵件正文,然后再對其進行加密。 這種壓縮不僅使文件更易于傳輸,而且增強了安全性。 當前,有一個負責維護該項目的標準機構: OpenPGP Alliance 。
壓縮后,PGP然后創建一個會話密鑰。 該會話密鑰是一次一次性密鑰,該密鑰是根據鼠標的移動和鍵入的擊鍵生成的。 使用該會話密鑰,數據被加密以形成密文。 加密后,會話密鑰將被加密為收件人的公共密鑰,該公共密鑰綁定到用戶名和/或電子郵件地址(稍后會對此進行詳細介紹)。 此公鑰與密文一起傳輸到收件人。
解密是相反的。 PGP的接收者副本使用用戶私鑰來恢復上面生成的會話密鑰,以便解密密文。
除加密外,如果需要提供某種形式的驗證,PGP還將加密功能強的哈希函數用于消息簽名。 散列函數是一個采用可變長度輸入(消息)并產生固定長度輸出的過程。 說160位。 這稱為消息摘要 , 消息摘要的變化很小,而輸入的變化很小。 然后,PGP使用摘要和私鑰創建“簽名”。 此外,該簽名和純文本被發送到接收者,接收者將需要重新計算摘要并驗證簽名。 同樣,此消息的最輕微改動將更改已簽名的文檔,并導致驗證過程失敗。
在Java中,也許最受歡迎的加密庫提供程序是“ Bouncy Castle軍團” 。
// insert code here
public class PGPExample {public static void encrypt() {Security.addProvider(new BouncyCastleProvider());//Load Public Key FileFileInputStream key = new FileInputStream("res/keys/public.bpg");PGPPublicKey pubKey = KeyBasedFileProcessorUtil.readPublicKey(key);//Output fileFileOutputStream out = new FileOutputStream("target/enc.bpg");//Input fileString inputFilename = "src/main/resources/plaintext.txt";//Other settingsboolean armor = false;boolean integrityCheck = false;KeyBasedFileProcessorUtil.encryptFile(out, inputFilename, pubKey, armor, integrityCheck); }
}
資源資源
- http://www.pgpi.org/doc/pgpintro/
- http://en.wikipedia.org/wiki/Pretty_Good_Privacy
- http://www.rossde.com/PGP/index.html#links
- http://www.openpgp.org/
- http://www.bouncycastle.org/java.html
參考:來自Reflective Thought.net的 JCG合作伙伴的 Java和Pretty Good Privacy(PGP) 。
- 討厭Java嗎? 您正在打錯仗。
- 從敏捷開發中省錢
- 選擇一種新的編程語言來學習
- 每個程序員都應該知道的事情
翻譯自: https://www.javacodegeeks.com/2011/06/java-pretty-good-privacy-pgp.html