DH密钥交换主要是两个公式的编写,即:

·公钥计算公式;

·密钥计算公式;

生成随机数作为私钥

截图如下:

源码如下:

DH.java

package cn.it1995.tool;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;public class DH {private static final int dhP = 45;private static final  int dhG = 9;private int mPriKey;//构造函数随机私钥public DH(){Random r = new Random();mPriKey = r.nextInt(20);System.out.println("dh priKey is : " + mPriKey);}//公钥计算公式计算出公钥public int getPublicKey(){return (int) (Math.pow(dhG, mPriKey) % dhP);}//使用对方公钥与自己私钥生成密钥//在把结果转256字节,AES密钥需要128字节或256字节public byte[] getSecretKey(long publicKey){int buf = (int) (Math.pow(publicKey, mPriKey) % dhP);return sha256(buf);}//转换成byte[256]类型,作为AES密钥private byte[] sha256(int data){try {MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");messageDigest.update(DataSecret.int2Byte(data));return messageDigest.digest();}catch (NoSuchAlgorithmException e) {e.printStackTrace();}return new byte[]{-1};}
}

DataSecret.java

package cn.it1995.tool;import org.apache.commons.codec.binary.Base64;import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;public class DataSecret {public static byte[] encode(byte[] txt) throws UnsupportedEncodingException {return Base64.encodeBase64(txt);}public static byte[] decode(String txt){return Base64.decodeBase64(txt);}public static byte[] int2Byte(int data){ByteBuffer byteBuffer = ByteBuffer.allocate(4);byteBuffer.putInt(data);return byteBuffer.array();}
}

Main.java

 public static void main(String[] args) throws UnsupportedEncodingException {//查密钥DH dhC = new DH();DH dhS = new DH();int publicKeyC = dhC.getPublicKey();int publicKeyS = dhS.getPublicKey();byte[] secretC = dhC.getSecretKey(publicKeyS);byte[] secretS = dhS.getSecretKey(publicKeyC);System.out.println("client's secrete is : ");for(byte i : secretC){System.out.print(i + " ");}System.out.println("\nserver's secrete is : ");for(byte i : secretS){System.out.print(i + " ");}}

Java笔记-DH密钥交换相关推荐

  1. Java笔记-DH密钥交换获取密钥及AES加解密

    DH密钥交换是这样的: 程序运行截图如下: D:\java8\content\bin\java.exe -javaagent:D:\idea\content\lib\idea_rt.jar=61009 ...

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

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

  3. 11.3-全栈Java笔记:线程的生命周期

    一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态 ...

  4. 10.4-全栈Java笔记:常用流详解(二)

    上节我们讲到「Java中常用流:文件字节流和字节数组流」,本节我们继续走起~  缓冲流 BufferedInputStream和BufferedOutputStream这两个流是处理流,通过内部缓存数 ...

  5. java笔记之抽象类和接口

    前言 java笔记之抽象类和接口是开发人员的设计工具 正文 1.抽象类 客观存在的一类事物,当这类事物都是抽象的,无法具体的描述. 1)语法: 修饰符 abstract class 类名{ } 2)特 ...

  6. 9.1-全栈Java笔记: 容器泛型—认识Collection接口

    开发和学习中需要时刻和数据打交道,如果组织这些数据是我们编程中重要的内容. 我们一般通过"容器"来容纳和管理数据.   事实上,数组就是一种容器,可以在其中放置对象或基本类型数据. ...

  7. java笔记(3):String(2)

    java笔记(3):String(2) 参考资料:网易云网课李兴华:http://study.163.com/course/courseMain.htm?courseId=1455026 一.字符串一 ...

  8. 4.8-全栈Java笔记:包机制

    包机制是java中管理类的重要手段. 开发中,我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理. 包对于类,相当于,文件夹对于文件的作用. package 我们通过 ...

  9. Java笔记07-List、Set、数据结构、Collections

    Java笔记07-List.Set.数据结构.Collections 主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 2.1 数据结构有什么用? 当你用着jav ...

最新文章

  1. java课程总结_java课程总结报告.doc
  2. MAX232和PL2303、CH340的区别
  3. Linux中文档去掉windows文本的多余的回车符(^M)
  4. 盘点18个免费的WordPress主题后台选项开发框架
  5. win10共享打印错误0x0000006_Win10连接共享打印机提示0x80070035错误的解决办法
  6. Spark Streaming 和 Flink 的对比以及详细描述,图文对比、代码
  7. Python安装OpenGL包
  8. python2.7.12源码编译
  9. Flask入门学习---进一步了解模板
  10. MATLAB实现Otsu算法
  11. 开源生产排程aps软件dream设计思路分析
  12. C64x+ 与 C64x Cache 区别
  13. 科技爱好者周刊(第 150 期):当音乐还是稀缺的时候
  14. Arduino超声波模块原理
  15. 360无线wifi路由器连接到服务器,把360无线路由器设置为二级路由器 | 192路由网...
  16. 【OpenCV C++】照片换底
  17. Java买飞机票代码
  18. ip地址转换成16进制long
  19. HTML中的Switch开关
  20. Vue3 + elementplus 分页组件英文改为中文

热门文章

  1. 给Macbook装系统的网址
  2. Windows Server 2012R2之重复数据删除实战
  3. .NET 中String类功能分类概述
  4. 算法研究:插入类排序(简单插入,折半插入,希尔排序)
  5. silverlight 上下标
  6. LNMP实现服务器轮询负载均衡
  7. 三款博客备份下载软件
  8. C/C++编程笔记:经典游戏植物大战僵尸游戏辅助,源码送上
  9. 飞鸽传书系统上开发是一件多么惬意的事情
  10. Facebook今年曾多次升级其安全和隐私控制