对称加密算法:双方必须约定好算法

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 算法的加解密方式

算法实现源码下载地址:http://download.csdn.net/detail/jacxuan/9774737

JAVA加解密 -- 对称加密算法与非对称加密算法的更多相关文章

  1. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    版权声明:本文为博主原创文章,未经博主允许不得转载. [前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 [最简单的加密] 1.简单的概念 明文:加密前的 ...

  2. 160829、Java加解密与数字签名

    ** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...

  3. Java加解密与数字签名

    ** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...

  4. 10.Java 加解密技术系列之 DH

    Java 加解密技术系列之 DH 序 概念 原理 代码实现 结果 结束语 序 上一篇文章中简单的介绍了一种非对称加密算法 — — RSA,今天这篇文章,继续介绍另一种非对称加密算法 — — DH.当然 ...

  5. 9.Java 加解密技术系列之 RSA

    Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项 ...

  6. 8.Java 加解密技术系列之 PBE

    Java 加解密技术系列之 PBE 序 概念 原理 代码实现 结束语 序 前 边的几篇文章,已经讲了几个对称加密的算法了,今天这篇文章再介绍最后一种对称加密算法 — — PBE,这种加密算法,对我的认 ...

  7. Java 加解密技术系列文章

    Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...

  8. 11.Java 加解密技术系列之 总结

    Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的 ...

  9. 7.java 加解密技术系列之 AES

    java 加解密技术系列之 AES 序 概念 原理 应用 代码实现 结束语 序 这篇文章继续介绍对称加密算法,至于今天的主角,不用说,也是个厉害的角色 — — AES.AES 的出现,就是为了来替代原 ...

随机推荐

  1. mysql 单列索引限制

    innodb_large_prefix. 这个参数默认值是OFF.当改为ON时,允许列索引最大达到3072. >=5.7.7默认打开 <=5.7.6默认关闭 innodb_large_pr ...

  2. golang中的反射

    反射操作普通变量 package main import ( "fmt" "reflect" ) func main(){ a := 1 //reflect.T ...

  3. 官方文档,才是正途-docker-compose

    需要的ingress网络映射,还是host宿主机端口映射: https://docs.docker.com/compose/compose-file/#secrets ================ ...

  4. 为当前用户创建cron服务

    为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...

  5. ubuntu、linux更换pip源

    1.创建pip配置文件 vi ~/.pip/pip.conf 2.写入配置内容 [global] trusted-host = mirrors.aliyun.com index-url = http: ...

  6. POJ 2367 Genealogical tree【拓扑排序/记录路径】

    Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7101 Accepted: 4585 Spe ...

  7. 让你的apache支持ipv6

    如果你使用的linux系统已经获取到了ipv6地址,你就可以让你的apache htpd 等也支持ipv6. 1.检查linux监听的端口,如果有:::port ,而且获取到了ipv6地址,则可以确定 ...

  8. [BZOJ 2425] 计数

    Link: BZOJ 2425 传送门 Solution: 其实就是利用数位$dp$的思想来暴力计数的一道题目 如果答案有$dgt$位,可以类似 [BZOJ 1833] 先计算出1至$dgt-1$位的 ...

  9. bzoj 2660: [Beijing wc2012]最多的方案

                       Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 617  Solved: 361[Submit][Status][ ...

  10. 【二分答案】【最大流】bzoj3130 [Sdoi2013]费用流

    二分最大的边的cap,记作Lim. 把所有的边的cap设为min(Lim,cap[i]). Bob一定会把单位费用加到最大边上. #include<cstdio> #include< ...