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 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);   }
}

资源资源

  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) 。

相关文章 :
  • 讨厌Java吗? 您正在打错仗。
  • 从敏捷开发中省钱
  • 选择一种新的编程语言来学习
  • 每个程序员都应该知道的事情

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU 5691 Sitting in Line 状压dp

Sitting in Line题目连接: http://acm.hdu.edu.cn/showproblem.php?pid5691 Description 度度熊是他同时代中最伟大的数学家,一切数字都要听命于他。现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了。游戏的规则十分简单&#xff0c…

hello oc

printf("Hello C\n"); //OC可以采用C语言的输出方式 printf("The number is %d\n",100);//%d 输出数字 printf("Hello %s\n","XiaoMing");//%s 输出字符 NSLog("Hello Objective-C"); //采用oc的输出,前面带了一…

Spring3 RESTful Web服务

Spring 3提供了对RESTful Web服务的支持。 在本教程中,我们将向您展示如何在Spring中实现RESTful Web服务 ,或者如何将现有的Spring服务公开为RESTful Web服务 。 为了使事情变得更有趣,我们将从上一篇关于Spring GWT Hibernate JPA Infinisp…

zoj 3765 块状链表 OR splay

各种操作o(╯□╰)o...不过都挺简单&#xff0c;不需要lazy标记。 方法1&#xff1a;块状链表 块状链表太强大了&#xff0c;区间操作实现起来简单暴力&#xff0c;效率比splay稍微慢一点&#xff0c;内存开销小很多。 1 #include <iostream>2 #include <cstring>3…

【C#公共帮助类】 Image帮助类

大家知道&#xff0c;开发项目除了数据访问层很重要外&#xff0c;就是Common了&#xff0c;这里就提供了强大且实用的工具。 【C#公共帮助类】 Convert帮助类 Image类&#xff1a; using System; using System.Collections.Generic; using System.Text; using System.IO; usin…

Java泛型快速教程

泛型是Java SE 5.0引入的一种Java功能&#xff0c;在其发布几年后&#xff0c;我发誓那里的每个Java程序员不仅听说过它&#xff0c;而且已经使用过它。 关于Java泛型&#xff0c;有很多免费和商业资源&#xff0c;而我使用的最佳资源是&#xff1a; Java教程 Java泛型和集合…

876. 链表的中间结点

给定一个头结点为 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点 代码一&#xff1a; 自己想的一个方法 class Solution {public ListNode middleNode(ListNode head) {ListNode p1 head;ListNode p2 head;//i,j…

Hive查询Join

Select a.val,b.val From a [Left|Right|Full Outer] Join b On (a.keyb.key); 现有两张表&#xff1a;sales 列出了人名及其所购商品的 ID&#xff1b;things 列出商品的 ID 和名称&#xff1a; hive> select * from sales; OK Joe 2 Hank 4 Ali 0 Eve 3 Ha…

jquery 获取easyui combobox选中的值

$(#comboboxlist).combobox(getValue);转载于:https://www.cnblogs.com/ftm-datablogs/p/5526857.html

调度Java应用程序中的主体

许多项目需要计划功能&#xff0c;例如我们计划的工作&#xff0c;重复的工作&#xff0c;异步执行等。 我们的首选方法是使用企业工作调度程序&#xff0c;例如OpenSymphony的Quartz。 使用计划任务进行编码时&#xff0c;最棘手的部分之一是执行部分。 这里的主要经验法则是…

继承映射关系 joinedsubclass的查询

会出现下面这样的错一般是配置文件中的mapping和映射文件中的package路径或者class中的name路径不一致 org.hibernate.MappingException: Unknown entity: com.zh.hibernate.joinedsubclass.Student at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(Sessi…

Spark系列—02 Spark程序牛刀小试

一、执行第一个Spark程序 1、执行程序 我们执行一下Spark自带的一个例子&#xff0c;利用蒙特卡罗算法求PI&#xff1a; 启动Spark集群后&#xff0c;可以在集群的任何一台机器上执行一下命令&#xff1a; /home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \ --class o…

JVM选项:-client vs -server

您是否曾经在运行Java应用程序时想知道-client或-server开关是什么&#xff1f; 例如&#xff1a; javaw.exe -client com.blogspot.sdoulger.LoopTest也显示在java.exe的“帮助”中&#xff0c;例如&#xff0c;其中的选项包括&#xff1a; -client选择“客户端” VM -serv…

网页前台小知识

1.左右布局div块自适应&#xff0c;首先外边套一个div,把宽度固定一个px&#xff0c;然后margin设为&#xff10; atuo&#xff1b;这样他会根据窗口大小自动变换左右距离&#xff0e;就这么简单&#xff1c;/p> 2.多个标签共用一个样式&#xff0c;用&#xff0c;分隔开 p…

统计字符串每个字符出现的次数

//str是个只包含小写字母的字符串&#xff0c;以下是统计每个字符出现的频数 int[] cnt new int[26];//toCharArray() for (char ch : str.toCharArray()) {cnt[ch - a]; }//charAt() for(int i 0;i<str.length;i){char ch str.charAt(i);cnt[ch - a]; }

在Java 7中处理文件

以下是The Well-Grounded Java Developer的草稿的修改后的片段。 它使您快速了解与以前版本相比&#xff0c;在Java 7中操作文件要容易得多。 通过使用新的Files类及其许多实用程序方法&#xff0c;您可以仅用一行代码就可以对文件执行以下操作&#xff1a; 创建 删除 复制 …

3.1存储管理操作系统

存储器管理的对象是主存&#xff08;内存&#xff09;。其主要功能包含分配和回收主存空间、提高主存的利用率、扩充主存、对主存信息实现有效保护。存储器的结构为&#xff1a;寄存去、缓存、主存、外存。逻辑地址&#xff08;对用户角度。程序存放的位置&#xff09;、物理地…

学习教材《构建之法》遇到的问题及思路

在学习中每个人都会遇到各种各样的问题&#xff0c;下面就是我遇到的问题及可能解决问题的思路。 1.如何写好程序的注释&#xff0c;每个人都会写注释&#xff0c;但是&#xff0c;需要注释什么&#xff1f; 思路&#xff1a;注释是为了解释程序做什么&#xff0c;为什么要这样…

了解和扩展Java ClassLoader

Java ClassLoader是项目开发中Java的关键但很少使用的组件之一。 就我个人而言&#xff0c;我从未在任何项目中扩展ClassLoader&#xff0c;但是拥有自己的可以自定义Java类加载的ClassLoader的想法让我感到很兴奋。 本文将概述Java类加载&#xff0c;然后继续创建自定义ClassL…

CAD教程-AL对其命令

AL可以实现不规则的对其功能 1.第一步按下AL&#xff0c;按下Enter 2.选择第一个源点 3.选择第一个目标点 4.选择第二个源点 5.选择第二个目标点 6.按下Enter&#xff0c;完成移位 转载于:https://www.cnblogs.com/weloveshare/p/4739873.html