62,623
社区成员
发帖
与我相关
我的任务
分享package com.example.try9.Encryption;
import java.security.AlgorithmParameterGenerator;
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.InvalidParameterSpecException;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.KeyAgreement;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;
public class SenderDiffieHellman {
private static KeyAgreement KeyAgree;
public static String Generator() throws InvalidParameterSpecException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException {
//初始化密钥对的参数
DHParameterSpec dhSkipParamSpec;
AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator
.getInstance("DH");
paramGen.init(256);
AlgorithmParameters params = paramGen.generateParameters();
dhSkipParamSpec = (DHParameterSpec) params
.getParameterSpec(DHParameterSpec.class);
//创建一个密钥对
KeyPairGenerator KpairGen = KeyPairGenerator.getInstance("DH");
KpairGen.initialize(dhSkipParamSpec);
KeyPair Kpair = KpairGen.generateKeyPair();
/** 创建密钥协议,产生私钥 */
KeyAgree = KeyAgreement.getInstance("DH");
KeyAgree.init(Kpair.getPrivate());
/** 产生公钥 */
byte[] PubKeyEnc = Kpair.getPublic().getEncoded();
String pubKeyStr=new String(PubKeyEnc);
System.out.println(pubKeyStr);
return pubKeyStr;
}
//产生共享密钥,解析来自另一端的公钥
public static String Parser(String pubKeyStr) throws InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, IllegalStateException{
byte[] pubKeyEnc=pubKeyStr.getBytes();
KeyFactory KeyFac = KeyFactory.getInstance("DH");
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyEnc);
PublicKey PubKey = KeyFac.generatePublic(x509KeySpec);
KeyAgree.doPhase(PubKey, true);
byte[] SharedSecret = KeyAgree.generateSecret();
String sharedSecretStr=new String (SharedSecret);
return sharedSecretStr;
}
}
package com.example.try2.Decryption;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.KeyAgreement;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;
public class ReceiverDiffieHellman {
// 收到sender的配置之后初始化自己的配置,然后利用这个配置并结合自己的密钥对产生相应的公钥和私钥,
public static String resultPubKsyStr;
public static String sharedSecretStr;
public static void ParserAndGenerator(String pubKeyStr) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidAlgorithmParameterException, InvalidKeyException {
byte[] pubKeyEnc=pubKeyStr.getBytes();
KeyFactory KeyFac = KeyFactory.getInstance("DH");
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyEnc);
PublicKey PubKey = KeyFac.generatePublic(x509KeySpec);
DHParameterSpec dhParamSpec = ((DHPublicKey)PubKey).getParams();
KeyPairGenerator KpairGen = KeyPairGenerator.getInstance("DH");
KpairGen.initialize(dhParamSpec);
KeyPair Kpair = KpairGen.generateKeyPair();
//产生了自己的私钥用于未来的计算
KeyAgreement KeyAgree = KeyAgreement.getInstance("DH");
KeyAgree.init(Kpair.getPrivate());
KeyAgree.doPhase(PubKey, true);
byte[] SharedSecret = KeyAgree.generateSecret();
sharedSecretStr=new String(SharedSecret);
//产生公钥用于屏幕显示
byte[] PubKeyEnc = Kpair.getPublic().getEncoded();
resultPubKsyStr=new String(PubKeyEnc);
System.out.println("ss:"+sharedSecretStr);
System.out.println("re"+resultPubKsyStr);
System.out.println("I'm OK now");
}
}