java dh算法_java 非对称加密算法DH实现详解
非对称加密算法是相对于对称加密算法来说的,对于对称加密算法请查阅之前的总结,今天为大家介绍一下DH算法,DH是一种密钥交换算法,接收方根据发送方加密时的密钥,生成接收方解密密钥。下面就一起来学习一下吧:
初始化发送方密钥:
KeyPairGenerator sendKeyPairGenerator = KeyPairGenerator.getInstance("DH");
sendKeyPairGenerator.initialize(512);
KeyPair sendKeyPair = sendKeyPairGenerator.generateKeyPair();
byte[] sendPublicKeyEnc = sendKeyPair.getPublic().getEncoded();//生成发送方公钥,发送给接收方(网络、文件...)
初始化接收方密钥:
KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH");
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(sendPublicKeyEnc);
PublicKey receivePublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec);
DHParameterSpec dhParameterSpec = ((DHPublicKey)receivePublicKey).getParams();
KeyPairGenerator receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH");
receiverKeyPairGenerator.initialize(dhParameterSpec);
KeyPair receiverKeyPair = receiverKeyPairGenerator.generateKeyPair();
PrivateKey receiverPrivateKey = receiverKeyPair.getPrivate();
byte[] receiverPublicKeyEnc = receiverKeyPair.getPublic().getEncoded();
构建接收方密钥:
KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");
receiverKeyAgreement.init(receiverPrivateKey);
receiverKeyAgreement.doPhase(receivePublicKey, true);
SecretKey receiverDESKey = receiverKeyAgreement.generateSecret("DES");//接收方Key
构建发送方密钥:
KeyFactory sendKeyFactory = KeyFactory.getInstance("DH");
x509EncodedKeySpec = new X509EncodedKeySpec(receiverPublicKeyEnc);
PublicKey sendPublicKey = sendKeyFactory.generatePublic(x509EncodedKeySpec);
KeyAgreement sendKeyAgreement = KeyAgreement.getInstance("DH");
sendKeyAgreement.init(sendKeyPair.getPrivate());
sendKeyAgreement.doPhase(sendPublicKey, true);
SecretKey sendDESKey = sendKeyAgreement.generateSecret("DES");//发送方Key
发送方加密:
Cipher sendCipher = Cipher.getInstance("DES");
sendCipher.init(Cipher.ENCRYPT_MODE, sendDESKey);
byte[] sendResult = sendCipher.doFinal(src.getBytes());
System.out.println("sendResult :"+Hex.encodeHexString(sendResult));
接收方解密:
Cipher receiverCipher = Cipher.getInstance("DES");
receiverCipher.init(Cipher.DECRYPT_MODE, receiverDESKey);
byte[] receiverResult = receiverCipher.doFinal(sendResult);
System.out.println("receiverResult : "+new String (receiverResult));
基于密钥交换的非对称加密算法(DH),到这里就总结完毕了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java dh算法_java 非对称加密算法DH实现详解相关推荐
- python实现非对称加密算法_Python3非对称加密算法RSA实例详解
本文实例讲述了Python3非对称加密算法RSA.分享给大家供大家参考,具体如下: python3 可以使用 Crypto.PublicKey.RSA 和 rsa 生成公钥.私钥. 其中 python ...
- openssl 非对称加密算法DSA命令详解
1.DSA算法概述 DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换. DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括 ...
- 对称加密和非对称加密算法工作过程详解
非对称加密算法: 加密和解密使用不同的密钥.公钥只能用来加密,而私钥只能用来解密.私钥由用户自己拥有.公钥公开配送,只要有需求即可获得. 优点: 算法安全性高,公钥公开,私钥自己保存 缺点: 加密和解 ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- java 类参数_Java的数据类型和参数传递(详解)
Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127 (-2^7到2^7-1) shor ...
- java lombok 视频_Java开发神器Lombok使用详解
最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter.构造器方法.字符串输出的ToString方法和Equals/HashCode方法等.甚是浪费时间,也 ...
- java静态多态_Java静态方法不具有多态性详解
动态绑定机制使得基类的引用能够指向正确的子类对象,从而使得面向基类编程成为可能. 然而动态绑定在以下两种情况会失效. 1.基类方法是private或final修饰的 这个很好理解,因为private说 ...
- java linkedlist实例_Java Linkedlist原理及实例详解
这篇文章主要介绍了Java Linkedlist原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定义:linkedlist属于链表结构 ...
- java多线程教程_java 基础教程之多线程详解及简单实例
java 多线程详解 在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信. 线程是操作系统运行的基本单位,它 ...
- java observer模式_Java观察者模式(Observer)详解及应用
Java观察者模式(Observer)详解及应用 (2011-12-15 14:03:30) 标签: 杂谈 Java观察者模式(Observer)详解及应用 由于网站带有弱sns功能,因此需要设计关注 ...
最新文章
- 初学者的深度学习训练与部署
- 修改CentOS 7.2系统的主机名
- Introspection
- php截取字符串后编码不对,php截取字符串出现中文乱码问题的解决
- java基础 泛型类的定义
- java keytool 生成p12证书
- 福昕pdf转word免费版下载(附教程)
- 8086/8088寻址方式
- 【第五届集创赛备赛】七、紫光同创李星钢和王斌赛题培训(2021年4月13日)
- 全民学霸服务器在维护中需要多久,《全民学霸》学生系统详解,成就学霸之路...
- 关于手机的MAC地址
- 小丁带你走进git的世界三-撤销修改
- 用 函数 输入并计算平均分等
- [本周总结并查集,搜索]
- 地图热区随屏幕大小改变
- latex中图片和文字并列排放讲解
- Springboot毕设项目扶贫管理系统p8k44(java+VUE+Mybatis+Maven+Mysql)
- Android Studio调用谷歌浏览器打开网页
- win10-快捷键冲突检测工具-OpenArk
- OBD 诊断与 UDS 诊断有什么区别?
热门文章
- 锂电池放空后充不进电_锂电池放置太久无法充电 血的教训!
- Android Button按钮周围添加图片
- Go的WaitGroup源码分析
- 图Android 片缓存文件名,手机图片去了哪?教你理清照片存放路径
- Distributed Database Containers Deployment and Orchestration
- 原力计划第5周榜单揭晓!
- 详解谷歌浏览器 performance 选项卡
- 解决 winedit 打开tex文件 reading error(亲测可行)
- WinEdit + CTex 打开论文模板出现乱码
- 【Windows7】win7启动 报错 AutoIt错误,不能打开脚本文件