java pgp_Java相当好的隐私(PGP)
java pgp
公鑰加密
這篇文章討論了PGP或“很好的隱私”。 PGP是常規(guī)加密和公用密鑰加密的混合實(shí)現(xiàn)。 在詳細(xì)介紹PGP之前,讓我們先談?wù)劰€加密。
與其他任何加密技術(shù)一樣,公鑰加密解決了通過不安全介質(zhì)傳輸安全數(shù)據(jù)的問題。 即互聯(lián)網(wǎng)。 結(jié)果,該方案的目的是發(fā)送數(shù)據(jù),以便只有預(yù)期的收件人才能閱讀。
它通過使用非對(duì)稱密鑰加密來完成此任務(wù)。 它使用一對(duì)密鑰進(jìn)行加密:一個(gè)公共密鑰,用于加密來自發(fā)送方的數(shù)據(jù);一個(gè)“相應(yīng)的”私有密鑰,用于在接收端解密數(shù)據(jù)。 這些公鑰/私鑰在數(shù)學(xué)上是鏈接的,但已生成,因此它們都不是從另一個(gè)的知識(shí)派生而來(在計(jì)算上可行的)。 至少要等到最快的計(jì)算機(jī)問世的時(shí)候才能結(jié)束。 密鑰基于數(shù)學(xué)關(guān)系(最著名的是整數(shù)分解和離散對(duì)數(shù)問題)。 但是,隨著計(jì)算速度的加快,加密算法將始終需要變得更加復(fù)雜。
綜上所述,公鑰已發(fā)布并可用。 它使任何人都可以使用公鑰加密數(shù)據(jù),但是只有擁有私鑰的一方才能解密數(shù)據(jù)。 公鑰密碼術(shù)的一大好處是,由于所有通信僅涉及公鑰,并且從未傳輸或共享私鑰,因此它使沒有預(yù)先存在的安全性安排的各方能夠以安全的方式交換消息。 公鑰系統(tǒng)的一些常見示例是RSA(Rivest,Shamir和Adleman)和DSA(數(shù)字簽名算法)。
PGP
PGP由Phil Zimmermann于1991年創(chuàng)建,它是一種混合的公共密鑰加密/常規(guī)方案,其功能有所不同。 首先壓縮明文或純文本形式的郵件正文,然后再對(duì)其進(jìn)行加密。 這種壓縮不僅使文件更易于傳輸,而且增強(qiáng)了安全性。 當(dāng)前,有一個(gè)負(fù)責(zé)維護(hù)該項(xiàng)目的標(biāo)準(zhǔn)機(jī)構(gòu): OpenPGP Alliance 。
壓縮后,PGP然后創(chuàng)建一個(gè)會(huì)話密鑰。 此會(huì)話密鑰是一次一次性密鑰,該密鑰是通過鼠標(biāo)的移動(dòng)和鍵入的擊鍵生成的。 使用該會(huì)話密鑰,數(shù)據(jù)被加密以形成密文。 加密后,會(huì)話密鑰將被加密為收件人的公共密鑰,該公共密鑰將綁定到用戶名和/或電子郵件地址(稍后會(huì)對(duì)此進(jìn)行詳細(xì)介紹)。 此公鑰與密文一起傳輸?shù)绞占恕?
解密工作相反。 PGP的接收者副本使用用戶私鑰來恢復(fù)上面生成的會(huì)話密鑰,以便解密密文。
除加密外,如果需要提供某種形式的驗(yàn)證,PGP還將加密功能強(qiáng)的哈希函數(shù)用于消息簽名。 散列函數(shù)是一個(gè)采用可變長(zhǎng)度輸入(消息)并產(chǎn)生固定長(zhǎng)度輸出的過程。 說160位。 這稱為消息摘要 , 消息摘要的變化很小,而輸入的變化很小。 然后,PGP使用摘要和私鑰創(chuàng)建“簽名”。 此外,該簽名和純文本被發(fā)送到接收者,接收者將需要重新計(jì)算摘要并驗(yàn)證簽名。 同樣,此消息的最輕微改動(dòng)將更改已簽名的文檔并導(dǎo)致驗(yàn)證過程失敗。
在Java中,也許最受歡迎的加密庫提供程序是“ Bouncy Castle軍團(tuán)” 。
// 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); } }資源資源
參考:來自Reflective Thought.net的 JCG合作伙伴提供的Java和Pretty Good Privacy(PGP) 。
相關(guān)文章 :- 討厭Java嗎? 您正在打錯(cuò)仗。
- 從敏捷開發(fā)中省錢
- 選擇一種新的編程語言來學(xué)習(xí)
- 每個(gè)程序員都應(yīng)該知道的事情
翻譯自: https://www.javacodegeeks.com/2011/06/java-pretty-good-privacy-pgp.html
java pgp
總結(jié)
以上是生活随笔為你收集整理的java pgp_Java相当好的隐私(PGP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1是不是奇数 1是奇数还是偶数
- 下一篇: spring smtp_使用Spring