一 对称加密缺点
密钥传递过程复杂,这是对称加密带来的困扰。
二 DH密钥交换算法特点
构建本地密钥
双方密钥一致
三 DH相关参数
四 DH算法实现过程
1、初始化发送方的密钥(KeyPairGenerator、KeyPair、PublicKey)
2、初始化接受方的密钥(KeyFactory、X509EncodedKeySpec、DHPublicKey、DHParameterSpec、KeyPairGenerator、PrivateKey)
3、密钥构建(KeyAgeement、SecretKey、KeyFactory、X509EncodeKeySpec、PublicKey)
4、加密和解密(Cipher)
五 DH代码实现过程
package com.imooc.security.dh;import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;import javax.crypto.Cipher;
import javax.crypto.KeyAgreement;
import javax.crypto.SecretKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;import org.apache.commons.codec.binary.Base64;//import com.sun.org.apache.xalan.internal.utils.Objects;public class ImoocDH {private static String src = "cakin24 security dh";public static void main(String[] args) {jdkDH();}public static void jdkDH() {try {//1.初始化发送方密钥KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");senderKeyPairGenerator.initialize(512);KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();byte[] senderPublicKeyEnc = senderKeyPair.getPublic().getEncoded();//发送方公钥,发送给接收方(网络、文件。。。)//2.初始化接收方密钥KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH");X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKeyEnc);PublicKey receiverPublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec);DHParameterSpec dhParameterSpec = ((DHPublicKey)receiverPublicKey).getParams();KeyPairGenerator receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH");receiverKeyPairGenerator.initialize(dhParameterSpec);KeyPair receiverKeypair = receiverKeyPairGenerator.generateKeyPair();PrivateKey receiverPrivateKey = receiverKeypair.getPrivate();byte[] receiverPublicKeyEnc = receiverKeypair.getPublic().getEncoded();//3.密钥构建KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");receiverKeyAgreement.init(receiverPrivateKey);receiverKeyAgreement.doPhase(receiverPublicKey, true);SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES");KeyFactory senderKeyFactory = KeyFactory.getInstance("DH");x509EncodedKeySpec = new X509EncodedKeySpec(receiverPublicKeyEnc);PublicKey senderPublicKey = senderKeyFactory.generatePublic(x509EncodedKeySpec);KeyAgreement senderKeyAgreement = KeyAgreement.getInstance("DH");senderKeyAgreement.init(senderKeyPair.getPrivate());senderKeyAgreement.doPhase(senderPublicKey, true);SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES");//if (Objects.equals(receiverDesKey, senderDesKey)) {if(receiverDesKey.equals(senderDesKey)){System.out.println("双方密钥相同");}//4.加密Cipher cipher = Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE, senderDesKey);byte[] result = cipher.doFinal(src.getBytes());System.out.println("jdk dh encrypt : " + Base64.encodeBase64String(result));//5.解密cipher.init(Cipher.DECRYPT_MODE, receiverDesKey);result = cipher.doFinal(result);System.out.println("jdk dh decrypt : " + new String(result));} catch (Exception e) {e.printStackTrace();}}}
六 实现效果
双方密钥相同
jdk dh encrypt : wqnKvpQve05UD64OCQGXcQu5rcssEVSu
jdk dh decrypt : cakin24 security dh
七 应用场景

DH算法(密钥交换算法)相关推荐

  1. 从数学角度讲解DH密钥交换算法、非对称加密、数字签名

    背景知识 数字可以分为两大部分: 不可再分的数:prime number质数 可以再分的数:composite number 和数 每个数字可以描述为一个"锁" 每个数字有且只有一 ...

  2. java dh算法_dh密钥交换算法java

    dh密钥交换算法java 迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称"D–H") 是一种安全协议. 它可以让双方在完全没有对方任何预先信息的 ...

  3. 密码学 专题 DH密钥交换算法

    注意事项: SSL中密钥交换算法有6种:无效(没有密钥交换).RSA.匿名Diffie-Hellman.暂时Diffie-Hellman.固定Diffie-Hellman.Fortezza 生成对话密 ...

  4. 密钥交换算法(DH算法)

    背景 对称加密算法通过密钥解决了数据加密问题,但是如何安全的传输密钥成为了下一个问题.如果密钥被窃取了,那对称加密数据就没有什么意义了.密钥交换算法(Diffie-Hellman算法 or DH算法) ...

  5. DH密钥交换算法的python实现——Diffie–Hellman key exchange

    文章目录 前言 DH交换算法简介 DH算法 Python算法的实现 后记 前言 DH交换算法简介 Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安 ...

  6. Nodejs进阶:使用DiffieHellman密钥交换算法

    简介 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥.目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端.服务端利用DH ...

  7. 密钥交换算法 - Java加密与安全

    密钥交换算法我们在使用对称加密算法的时候,我们用的是同一个密钥key 我们以AES加密为例,当我们需要加密明文,我们需要一个随机生成的key,作为密钥进行加解密,最后我们的问题是如何传递密钥 因为不给 ...

  8. 密钥协商算法的演变 —— RSA算法 - DH算法 - DHE算法 - ECDHE算法

    文章目录 1. RSA算法 RSA握手过程 RSA秘钥协商算法最大的缺陷 2. DH算法 3. DHE算法 4. ECDHE算法 ECDHE秘钥协商算法的TSL握手: 1. RSA算法 传统的 TLS ...

  9. 了解一下密钥交换算法ECDH

    搬一下别人的解释: 下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理. 1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p ...

  10. 8月30日云栖精选夜读:Nodejs进阶:使用DiffieHellman密钥交换算法

    原文地址 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥.目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端.服务端利用 ...

最新文章

  1. pandas中的括号索引
  2. 笨办法学C 练习28:Makefile 进阶
  3. 牛客多校2 - Fake Maxpooling(线性递推gcd+单调队列)
  4. 习题7-2 求一批整数中出现最多的个位数字 (20分)
  5. 李楠谈小米MIX Alpha:卖19999元还是不赚钱
  6. barplot函数--R语言
  7. C#中?与??的区别
  8. java环境已经弄好jar文件还是打不开解决方法
  9. UML-----构件图与部署图
  10. Adobe Premiere(pr)2021 安装教程【64位】
  11. 原创 | 混沌工程(Chaos Engineering)初识
  12. 稀疏矩阵乘法运算(C语言)
  13. Exploring 3-D–2-D CNN Feature Hierarchy for Hyperspectral Image Classification翻译全文
  14. 使用Excel连接WINCC生成报表的实现方法
  15. 使用ManagedWifi连接无线网络
  16. CV 经典主干网络 (Backbone) 系列: Darknet-53
  17. Linux/Unix获取时间戳
  18. 数据人之苦,你造吗?(转自知乎)
  19. P4848 崂山白花蛇草水
  20. React styled-components TypeScript 的最佳实践

热门文章

  1. 华为云计算hcip证书有效期_华为云计算HCIP V4.0认证要发布了!
  2. html5手机静态页面,html手机端WEB纯静态页面
  3. 计算机无法连接此设备,[修复]目前,此硬件设备未连接到计算机(代码45) | MOS86...
  4. Linux下opendir、readdir使用小结
  5. OpenWrt无线AP+STA配置
  6. 无人驾驶全局路径规划之A星算法
  7. 计算机毕业设计jspm平面设计类众包威客网网站mjmBBmysql程序
  8. 微信小程序 上传图片(多张/单张)
  9. 教程:使用Java以编程方式将PLT转换为PDF或图像
  10. 自动将视频文件生成字幕的软件autosub安装及使用(支持英文、日语和法语)