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();}}}
DH算法(密钥交换算法)相关推荐
- 从数学角度讲解DH密钥交换算法、非对称加密、数字签名
背景知识 数字可以分为两大部分: 不可再分的数:prime number质数 可以再分的数:composite number 和数 每个数字可以描述为一个"锁" 每个数字有且只有一 ...
- java dh算法_dh密钥交换算法java
dh密钥交换算法java 迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称"D–H") 是一种安全协议. 它可以让双方在完全没有对方任何预先信息的 ...
- 密码学 专题 DH密钥交换算法
注意事项: SSL中密钥交换算法有6种:无效(没有密钥交换).RSA.匿名Diffie-Hellman.暂时Diffie-Hellman.固定Diffie-Hellman.Fortezza 生成对话密 ...
- 密钥交换算法(DH算法)
背景 对称加密算法通过密钥解决了数据加密问题,但是如何安全的传输密钥成为了下一个问题.如果密钥被窃取了,那对称加密数据就没有什么意义了.密钥交换算法(Diffie-Hellman算法 or DH算法) ...
- DH密钥交换算法的python实现——Diffie–Hellman key exchange
文章目录 前言 DH交换算法简介 DH算法 Python算法的实现 后记 前言 DH交换算法简介 Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安 ...
- Nodejs进阶:使用DiffieHellman密钥交换算法
简介 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥.目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端.服务端利用DH ...
- 密钥交换算法 - Java加密与安全
密钥交换算法我们在使用对称加密算法的时候,我们用的是同一个密钥key 我们以AES加密为例,当我们需要加密明文,我们需要一个随机生成的key,作为密钥进行加解密,最后我们的问题是如何传递密钥 因为不给 ...
- 密钥协商算法的演变 —— RSA算法 - DH算法 - DHE算法 - ECDHE算法
文章目录 1. RSA算法 RSA握手过程 RSA秘钥协商算法最大的缺陷 2. DH算法 3. DHE算法 4. ECDHE算法 ECDHE秘钥协商算法的TSL握手: 1. RSA算法 传统的 TLS ...
- 了解一下密钥交换算法ECDH
搬一下别人的解释: 下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理. 1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p ...
- 8月30日云栖精选夜读:Nodejs进阶:使用DiffieHellman密钥交换算法
原文地址 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥.目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端.服务端利用 ...
最新文章
- pandas中的括号索引
- 笨办法学C 练习28:Makefile 进阶
- 牛客多校2 - Fake Maxpooling(线性递推gcd+单调队列)
- 习题7-2 求一批整数中出现最多的个位数字 (20分)
- 李楠谈小米MIX Alpha:卖19999元还是不赚钱
- barplot函数--R语言
- C#中?与??的区别
- java环境已经弄好jar文件还是打不开解决方法
- UML-----构件图与部署图
- Adobe Premiere(pr)2021 安装教程【64位】
- 原创 | 混沌工程(Chaos Engineering)初识
- 稀疏矩阵乘法运算(C语言)
- Exploring 3-D–2-D CNN Feature Hierarchy for Hyperspectral Image Classification翻译全文
- 使用Excel连接WINCC生成报表的实现方法
- 使用ManagedWifi连接无线网络
- CV 经典主干网络 (Backbone) 系列: Darknet-53
- Linux/Unix获取时间戳
- 数据人之苦,你造吗?(转自知乎)
- P4848 崂山白花蛇草水
- React styled-components TypeScript 的最佳实践
热门文章
- 华为云计算hcip证书有效期_华为云计算HCIP V4.0认证要发布了!
- html5手机静态页面,html手机端WEB纯静态页面
- 计算机无法连接此设备,[修复]目前,此硬件设备未连接到计算机(代码45) | MOS86...
- Linux下opendir、readdir使用小结
- OpenWrt无线AP+STA配置
- 无人驾驶全局路径规划之A星算法
- 计算机毕业设计jspm平面设计类众包威客网网站mjmBBmysql程序
- 微信小程序 上传图片(多张/单张)
- 教程:使用Java以编程方式将PLT转换为PDF或图像
- 自动将视频文件生成字幕的软件autosub安装及使用(支持英文、日语和法语)