/*
* @author W-nut
*/
package appFunction;
import javax.crypto.KeyAgreement;
import javax.crypto.SecretKey;
import javax.crypto.interfaces.DHPrivateKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
public class KeyChange
{
public static void main(String[] args)
{
try
{
// Generate key pair for 1
System.out.println("1 is generating a key pair");
KeyPairGenerator kpg1 = KeyPairGenerator.getInstance("DH");
kpg1.initialize(512);
KeyPair kp1 = kpg1.generateKeyPair();
// Create a KeyAgreement object using the private key
System.out.println("1 is creating a key agreement object");
KeyAgreement ka1 = KeyAgreement.getInstance("DH");
DHPrivateKey privateKey1 = (DHPrivateKey) kp1.getPrivate();
DHPublicKey publicKey1 = (DHPublicKey) kp1.getPublic();
ka1.init(privateKey1);
System.out.println("1 is using " publicKey1.getY() " for its public key");
// Generate key pair for 2
System.out.println("2 is generating a key pair");
DHParameterSpec dhParamSpec = publicKey1.getParams();
KeyPairGenerator kpg2 = KeyPairGenerator.getInstance("DH");
kpg2.initialize(dhParamSpec);
KeyPair kp2 = kpg2.generateKeyPair();
// Create a KeyAgreement object using the private key
System.out.println("2 is creating a key agreement object");
KeyAgreement ka2 = KeyAgreement.getInstance("DH");
DHPrivateKey privateKey2 = (DHPrivateKey) kp2.getPrivate();
DHPublicKey publicKey2 = (DHPublicKey) kp2.getPublic();
ka2.init(privateKey2);
System.out.println("2 is using " publicKey2.getY() " for its public key");
// Use the KeyAgreement object of 1 to generate its shared key
ka1.doPhase(publicKey2,true);
SecretKey sharedKey1 = ka1.generateSecret("DES");
System.out.println("1 is using "
Conversion.byteArrayToHexString(sharedKey1.getEncoded()) " as its DES session key");
// Use the KeyAgreement object of 2 to generate its shared key
ka2.doPhase(publicKey1,true);
SecretKey sharedKey2 = ka2.generateSecret("DES");
System.out.println("2 is using "
Conversion.byteArrayToHexString(sharedKey2.getEncoded()) " as its DES session key");
}
catch(Exception e)
{
System.out.println("出错啦!!!");
}
}
}
这里小弟就不运行啦!
部分文件用到的Conversion类型转换类:
/*
* @author W-nut
*FileInfo:类型转换
*/
package appFunction;
import java.util.Base64;
public class Conversion
{
//方法说明:字节数组转换成字符串
public static String byteArrayToHexString(byte [] digestA)
{
StringBuilder sb =new StringBuilder();
for (byte value : digestA)
{
int temp = value & 0xFF;
sb.append(Integer.toHexString(temp));
}
return sb.toString();
}
//方法说明:base64编码转换成字符串
public static String byteArrayToBase64String(byte [] keyInfo)
{
return Base64.getEncoder().encodeToString(keyInfo);
}
}