非对称加密算法是相对于对称加密算法来说的,对于对称加密算法请查阅之前的总结,今天为大家介绍一下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实现详解相关推荐

  1. python实现非对称加密算法_Python3非对称加密算法RSA实例详解

    本文实例讲述了Python3非对称加密算法RSA.分享给大家供大家参考,具体如下: python3 可以使用 Crypto.PublicKey.RSA 和 rsa 生成公钥.私钥. 其中 python ...

  2. openssl 非对称加密算法DSA命令详解

    1.DSA算法概述 DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换. DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括 ...

  3. 对称加密和非对称加密算法工作过程详解

    非对称加密算法: 加密和解密使用不同的密钥.公钥只能用来加密,而私钥只能用来解密.私钥由用户自己拥有.公钥公开配送,只要有需求即可获得. 优点: 算法安全性高,公钥公开,私钥自己保存 缺点: 加密和解 ...

  4. java闭合数据_java多线程中线程封闭详解

    线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...

  5. java 类参数_Java的数据类型和参数传递(详解)

    Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127 (-2^7到2^7-1) shor ...

  6. java lombok 视频_Java开发神器Lombok使用详解

    最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter.构造器方法.字符串输出的ToString方法和Equals/HashCode方法等.甚是浪费时间,也 ...

  7. java静态多态_Java静态方法不具有多态性详解

    动态绑定机制使得基类的引用能够指向正确的子类对象,从而使得面向基类编程成为可能. 然而动态绑定在以下两种情况会失效. 1.基类方法是private或final修饰的 这个很好理解,因为private说 ...

  8. java linkedlist实例_Java Linkedlist原理及实例详解

    这篇文章主要介绍了Java Linkedlist原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定义:linkedlist属于链表结构 ...

  9. java多线程教程_java 基础教程之多线程详解及简单实例

    java 多线程详解 在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信. 线程是操作系统运行的基本单位,它 ...

  10. java observer模式_Java观察者模式(Observer)详解及应用

    Java观察者模式(Observer)详解及应用 (2011-12-15 14:03:30) 标签: 杂谈 Java观察者模式(Observer)详解及应用 由于网站带有弱sns功能,因此需要设计关注 ...

最新文章

  1. 初学者的深度学习训练与部署
  2. 修改CentOS 7.2系统的主机名
  3. Introspection
  4. php截取字符串后编码不对,php截取字符串出现中文乱码问题的解决
  5. java基础 泛型类的定义
  6. java keytool 生成p12证书
  7. 福昕pdf转word免费版下载(附教程)
  8. 8086/8088寻址方式
  9. 【第五届集创赛备赛】七、紫光同创李星钢和王斌赛题培训(2021年4月13日)
  10. 全民学霸服务器在维护中需要多久,《全民学霸》学生系统详解,成就学霸之路...
  11. 关于手机的MAC地址
  12. 小丁带你走进git的世界三-撤销修改
  13. 用 函数 输入并计算平均分等
  14. [本周总结并查集,搜索]
  15. 地图热区随屏幕大小改变
  16. latex中图片和文字并列排放讲解
  17. Springboot毕设项目扶贫管理系统p8k44(java+VUE+Mybatis+Maven+Mysql)
  18. Android Studio调用谷歌浏览器打开网页
  19. win10-快捷键冲突检测工具-OpenArk
  20. OBD 诊断与 UDS 诊断有什么区别?

热门文章

  1. 锂电池放空后充不进电_锂电池放置太久无法充电 血的教训!
  2. Android Button按钮周围添加图片
  3. Go的WaitGroup源码分析
  4. 图Android 片缓存文件名,手机图片去了哪?教你理清照片存放路径
  5. Distributed Database Containers Deployment and Orchestration
  6. 原力计划第5周榜单揭晓!
  7. 详解谷歌浏览器 performance 选项卡
  8. 解决 winedit 打开tex文件 reading error(亲测可行)
  9. WinEdit + CTex 打开论文模板出现乱码
  10. 【Windows7】win7启动 报错 AutoIt错误,不能打开脚本文件