JAVA加解密 -- 对称加密算法与非对称加密算法
对称加密算法:双方必须约定好算法
DES 数据加密标准:由于不断地被破解 自98年起就已经逐渐放弃使用
AES 目前使用最多的加密方式,官方并未公布加密方式已被破解,替代DES
实现和DES非常接近
JDK无政策限制权限文件:因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制
构成:口令+盐(特殊的随机数或者字符串)
非对称加密算法:与门加密算法。
公钥和私钥分开,使用公钥加密的数据只有它的私钥一致才能解开。
DH 密钥交换算法
・・初始化发送方密钥:KeyPairGenrator(得到keyPair) KeyPair(得到公钥和私钥) PublicKey(公钥)
初始化接收方密钥:KeyFactory(通过某种规范生成密钥) X509EncodeedKeySpec(按照x509生成编码)
DHPublicKey DHParameterSpec(使用参数的集合) KeypairGenerator privateKey
密钥构建:KeyAgreement(提供秘钥协定协议) SecretKey(秘密密钥,生成一个分组的秘密密钥)KeyFactory
X509EncodeedKeySpec PublicKey
加密、解密
Cipher(为加密解密提供功能接口)
RSA 基于因子分解 目前适用范围最广的非对称加密算法
唯一广泛接受并实现
数据加密&数字签名
公钥加密、私钥解密
私钥加密、公钥解密
“`
//1.//初始化密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA”);
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateCrtKey rsaPrivateCrtKey = (RSAPrivateCrtKey) keyPair.getPrivate();
System.out.println(“public Key:” + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded()));
System.out.println(“private Key:”+org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPrivateCrtKey.getEncoded()));
//2.a//私钥加密,公钥解密 -- 加密
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateCrtKey.getEncoded());
KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(str.getBytes());
System.out.println("私钥加密、公钥解密:"+org.apache.commons.codec.binary.Base64.encodeBase64String(result));
//2.b//私钥加密,公钥解密 -- 解密
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
factory = KeyFactory.getInstance("RSA");
PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE,publicKey);
result = cipher.doFinal(result);
System.out.println("私钥加密、公钥解密:"+new String(result));
//3.a公钥加密、私钥 -- 加密
x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
factory = KeyFactory.getInstance("RSA");
publicKey = factory.generatePublic(x509EncodedKeySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE,publicKey);
result = cipher.doFinal(str.getBytes());
System.out.println("公钥加密、私钥 -- 加密:"+org.apache.commons.codec.binary.Base64.encodeBase64String(result));
//3.b公钥加密、私钥 -- 加密
pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateCrtKey.getEncoded());
factory = KeyFactory.getInstance("RSA");
privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
result = cipher.doFinal(result);
System.out.println("公钥加密、私钥 -- 解密:"+new String(result));
“`//其余部分实现方法差不多,就不都贴出来了,下面我放上源码下载地址
ElGamal 公钥加密算法 BC实现
和RSA实现方式一样.
Security.addProvider(new BouncyCastleProvider);
javaBase64 消息摘要算法加解密 对称算法加解密 非对称算法加解密 数字签名算法源码
包含Base64 MD家族(MD2 MD4 MD5)DES AES DH RSA DSA ECDSA 算法的加解密方式
JAVA加解密 -- 对称加密算法与非对称加密算法的更多相关文章
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
版权声明:本文为博主原创文章,未经博主允许不得转载. [前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 [最简单的加密] 1.简单的概念 明文:加密前的 ...
- 160829、Java加解密与数字签名
** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...
- Java加解密与数字签名
** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...
- 10.Java 加解密技术系列之 DH
Java 加解密技术系列之 DH 序 概念 原理 代码实现 结果 结束语 序 上一篇文章中简单的介绍了一种非对称加密算法 — — RSA,今天这篇文章,继续介绍另一种非对称加密算法 — — DH.当然 ...
- 9.Java 加解密技术系列之 RSA
Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项 ...
- 8.Java 加解密技术系列之 PBE
Java 加解密技术系列之 PBE 序 概念 原理 代码实现 结束语 序 前 边的几篇文章,已经讲了几个对称加密的算法了,今天这篇文章再介绍最后一种对称加密算法 — — PBE,这种加密算法,对我的认 ...
- Java 加解密技术系列文章
Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...
- 11.Java 加解密技术系列之 总结
Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的 ...
- 7.java 加解密技术系列之 AES
java 加解密技术系列之 AES 序 概念 原理 应用 代码实现 结束语 序 这篇文章继续介绍对称加密算法,至于今天的主角,不用说,也是个厉害的角色 — — AES.AES 的出现,就是为了来替代原 ...
随机推荐
- 使用div实现progress进度条
在百度上搜了很多方法去修改HTML5 progress的样式,然而并没有实现. 所以自己用div实现了一个. 简单粗暴(*^-^*) 可以在CSS里改样式,可以JS里改进度. <div cla ...
- Ubuntu服务器安装node
查看Ubuntu系统的是32位还是64位 harvey@harvey:/Application$ uname -m #x86_64表示这是64位的系统 x86_64 2. 在nodejs官网ht ...
- TCP,UDP,IP包头格式及说明(zz)
一.MAC帧头定义 /数据帧定义,头14个字节,尾4个字节/ typedef struct _MAC_FRAME_HEADER { ]; //目的mac地址 ]; //源mac地址 short m_c ...
- hdu 5176(并查集)
The Experience of Love Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- java 反射赋空值
https://stackoverflow.com/questions/10087989/how-do-i-reflectively-invoke-a-method-with-null-as-argu ...
- [LOJ#2540][PKUWC2018]随机算法(概率DP)
场上数据很水,比较暴力的做法都可以过90分以上,下面说几个做法. 1. 暴力枚举所有最大独立集,对每个独立集分别DP.复杂度玄学,但是由于最大独立集并不多,所以可以拿90. 2. dp[S][k]表示 ...
- [BZOJ 4057] Kingdoms
Link: BZOJ 4057 传送门 Solution: 一道比较基础的状压DP 看到$n<=20$,状态转移与顺序相关,就可以开心地状压了 1表示破产,0表示未破产,不断扩展破产的集合即可 ...
- POJ 2559 Largest Rectangle in a Histogram(单调栈)
[题目链接] http://poj.org/problem?id=2559 [题目大意] 给出一些宽度为1的长方形下段对其后横向排列得到的图形,现在给你他们的高度, 求里面包含的最大长方形的面积 [题 ...
- 【分治】计算概论(A) / 函数递归练习(1)多边形游戏
#include<cstdio> #include<algorithm> using namespace std; ],c[],s[]; int work(int L,int ...
- 【OpenJudge9268】【递推】酒鬼
酒鬼 总时间限制: 2000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB [描述] Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅.今天,他来到这个大 ...