java 0xf0_Diffle-Human密钥交换(信息安全)--java版本

package hao.ning;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.math.BigInteger;

import java.security.InvalidAlgorithmParameterException;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.NoSuchAlgorithmException;

import java.security.PrivateKey;

import java.security.PublicKey;

import javax.crypto.KeyAgreement;

import javax.crypto.spec.DHParameterSpec;

import javax.crypto.spec.SecretKeySpec;

public class Key_DH {

private final static byte skip1024ModulusBytes[]={

(byte)0xF4, (byte)0x88, (byte)0xFD, (byte)0x58,

(byte)0x4E, (byte)0x49, (byte)0xDB, (byte)0xCD,

(byte)0x20, (byte)0xB4, (byte)0x9D, (byte)0xE4,

(byte)0x91, (byte)0x07, (byte)0x36, (byte)0x6B,

(byte)0x33, (byte)0x6C, (byte)0x38, (byte)0x0D,

(byte)0x45, (byte)0x1D, (byte)0x0F, (byte)0x7C,

(byte)0x88, (byte)0xB3, (byte)0x1C, (byte)0x7C,

(byte)0x5B, (byte)0x2D, (byte)0x8E, (byte)0xF6,

(byte)0xF3, (byte)0xC9, (byte)0x23, (byte)0xC0,

(byte)0x43, (byte)0xF0, (byte)0xA5, (byte)0x5B,

(byte)0x18, (byte)0x8D, (byte)0x8E, (byte)0xBB,

(byte)0x55, (byte)0x8C, (byte)0xB8, (byte)0x5D,

(byte)0x38, (byte)0xD3, (byte)0x34, (byte)0xFD,

(byte)0x7C, (byte)0x17, (byte)0x57, (byte)0x43,

(byte)0xA3, (byte)0x1D, (byte)0x18, (byte)0x6C,

(byte)0xDE, (byte)0x33, (byte)0x21, (byte)0x2C,

(byte)0xB5, (byte)0x2A, (byte)0xFF, (byte)0x3C,

(byte)0xE1, (byte)0xB1, (byte)0x29, (byte)0x40,

(byte)0x18, (byte)0x11, (byte)0x8D, (byte)0x7C,

(byte)0x84, (byte)0xA7, (byte)0x0A, (byte)0x72,

(byte)0xD6, (byte)0x86, (byte)0xC4, (byte)0x03,

(byte)0x19, (byte)0xC8, (byte)0x07, (byte)0x29,

(byte)0x7A, (byte)0xCA, (byte)0x95, (byte)0x0C,

(byte)0xD9, (byte)0x96, (byte)0x9F, (byte)0xAB,

(byte)0xD0, (byte)0x0A, (byte)0x50, (byte)0x9B,

(byte)0x02, (byte)0x46, (byte)0xD3, (byte)0x08,

(byte)0x3D, (byte)0x66, (byte)0xA4, (byte)0x5D,

(byte)0x41, (byte)0x9F, (byte)0x9C, (byte)0x7C,

(byte)0xBD, (byte)0x89, (byte)0x4B, (byte)0x22,

(byte)0x19, (byte)0x26, (byte)0xBA, (byte)0xAB,

(byte)0xA2, (byte)0x5E, (byte)0xC3, (byte)0x55,

(byte)0xE9, (byte)0x2F, (byte)0x78, (byte)0xC7

};

// The skip 1024 bit modulus

/*转载请注明:www.panmum.com*/

private static final BigInteger skip1024Modulus=new BigInteger(1,skip1024ModulusBytes);

private static final BigInteger skip1024Base=BigInteger.valueOf(2);

DHParameterSpec DHP=new DHParameterSpec(skip1024Modulus,skip1024Base);

byte []sb;

public void makeKey(){

KeyPairGenerator kpg = null;

try {

kpg = KeyPairGenerator.getInstance("DH");

}

catch (NoSuchAlgorithmException e1) {

e1.printStackTrace();

}

try {

kpg.initialize(DHP);//初始化"DH",为其指定参数

}

catch (InvalidAlgorithmParameterException e) {

e.printStackTrace();

}

KeyPair kp=kpg.generateKeyPair();

PublicKey pbk=kp.getPublic();

PrivateKey prk=kp.getPrivate();

try {

FileOutputStream f1 = new FileOutputStream("pbk.dat");

ObjectOutputStream out1 = null;

try {

out1 = new ObjectOutputStream(f1);

}

catch (IOException e) {

e.printStackTrace();

}

try {

out1.writeObject(pbk);

}

catch (IOException e) {

e.printStackTrace();

}

}

/*转载请注明:www.tengxunyun.me*/

catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

FileOutputStream f2= new FileOutputStream("prk.dat");

ObjectOutputStream out2 = null;

try {

out2 = new ObjectOutputStream(f2);

}

catch (IOException e) {

e.printStackTrace();

}

try {

out2.writeObject(prk);

}

catch (IOException e) {

e.printStackTrace();

}

}

catch (FileNotFoundException e) {

e.printStackTrace();

}

}

public void shareKey(){

PublicKey pbk=null;

PrivateKey prk = null;

try {

FileInputStream f1= new FileInputStream("pbk.dat");

ObjectInputStream in1 = null;

try {

in1 = new ObjectInputStream(f1);

}

catch (IOException e) {

e.printStackTrace();

}

/*转载请注明:www.quzhuanpan.com*/

try {

try {

pbk=(PublicKey)in1.readObject();

}

catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

catch (IOException e) {

e.printStackTrace();

}

}

catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

FileInputStream f2= new FileInputStream("prk.dat");

ObjectInputStream in2 = null;

try {

in2 = new ObjectInputStream(f2);

}

catch (IOException e) {

e.printStackTrace();

}

try {

try {

prk=(PrivateKey)in2.readObject();

}

catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

catch (IOException e) {

e.printStackTrace();

}

}

catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

KeyAgreement ka=KeyAgreement.getInstance("DH");

ka.init(prk);//用自己的私钥初始化秘药协定对象

ka.doPhase(pbk, true);

sb=ka.generateSecret();

SecretKeySpec k=new SecretKeySpec(sb,"DESede");

}

catch (Exception e) {

e.printStackTrace();

}

}

public void printShareInformation(){

System.out.println("Share Information:");

for(int i=0;i

System.out.print(sb[i]+",");

}

}

}

package hao.ning;

public class Main {

public static void main(String args[]){

Key_DH k_dh=new Key_DH();

k_dh.makeKey();

k_dh.shareKey();

k_dh.printShareInformation();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值