Java相当好的隐私(PGP)

公钥加密

这篇文章讨论了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 File
         FileInputStream key = new FileInputStream("res/keys/public.bpg");
         PGPPublicKey pubKey = KeyBasedFileProcessorUtil.readPublicKey(key);
         
         //Output file
         FileOutputStream out = new FileOutputStream("target/enc.bpg");

         //Input file
         String inputFilename = "src/main/resources/plaintext.txt";

        //Other settings
        boolean armor = false;
        boolean integrityCheck = false;
        KeyBasedFileProcessorUtil.encryptFile(out, inputFilename, 
           pubKey, armor, integrityCheck);   
    }
}

资源资源

  1. http://www.pgpi.org/doc/pgpintro/
  2. http://en.wikipedia.org/wiki/Pretty_Good_Privacy
  3. http://www.rossde.com/PGP/index.html#links
  4. http://www.openpgp.org/
  5. http://www.bouncycastle.org/java.html

参考:来自Reflective Thought.net的 JCG合作伙伴的 Java和Pretty Good Privacy(PGP)

相关文章 :

翻译自: https://www.javacodegeeks.com/2011/06/java-pretty-good-privacy-pgp.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PGP(Pretty Good Privacy)是一种非对称加密算法,用于保护数据的安全性。Java语言可以实现PGP算法,下面是一个简单的示例: 1. 生成公钥和私钥 ```java Security.addProvider(new BouncyCastleProvider()); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC"); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); ``` 2. 加密数据 ```java byte[] plaintext = "Hello, world!".getBytes(); PGPObjectFactory pgpFactory = new PGPObjectFactory(PGPUtil.getDecoderStream(new ByteArrayInputStream(publicKeyData))); PGPPublicKeyRing publicKeyRing = (PGPPublicKeyRing) pgpFactory.nextObject(); PGPPublicKey publicKey = publicKeyRing.getPublicKey(); byte[] encryptedData = PGPUtils.encrypt(plaintext, publicKey, "BC"); ``` 3. 解密数据 ```java PGPObjectFactory pgpFactory = new PGPObjectFactory(PGPUtil.getDecoderStream(new ByteArrayInputStream(privateKeyData))); PGPSecretKeyRing secretKeyRing = (PGPSecretKeyRing) pgpFactory.nextObject(); PGPSecretKey secretKey = secretKeyRing.getSecretKey(); PGPPrivateKey privateKey = secretKey.extractPrivateKey(new JcePBESecretKeyDecryptorBuilder().setProvider("BC").build(passPhrase.toCharArray())); byte[] decryptedData = PGPUtils.decrypt(encryptedData, privateKey, "BC"); ``` 以上是一个简单的PGP算法实现示例,具体使用方法可以根据实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值