日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java笔记-DH密钥交换

發布時間:2025/3/15 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java笔记-DH密钥交换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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密钥交换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。