請(qǐng)問(wèn)為什么長(zhǎng)度會(huì)丟失
public??class?DH?{
????public?static?void?main(String[]?args)throws?Exception{
????????//初始化發(fā)送方密鑰----------------------------------------------------------------
????????KeyPairGenerator?keyPairGenerator=KeyPairGenerator.getInstance("DH");
????????keyPairGenerator.initialize(1024);
????????KeyPair?senderKeyPair=keyPairGenerator.generateKeyPair();
????????byte[]?senderPbkEnc=senderKeyPair.getPublic().getEncoded();//得到發(fā)送方公鑰的??byte數(shù)組形式;>>>>>>>>>>>>>>>>>-傳遞給接受方
?????????
????????//使用發(fā)送方密鑰中的參數(shù)?初始化接收方的密鑰載體------------------------------------------------
????????KeyFactory?keyFactory=KeyFactory.getInstance("DH");
????????X509EncodedKeySpec?x509EncodedKeySpec=new?X509EncodedKeySpec(senderPbkEnc);?//根據(jù)發(fā)送方給定的編碼密鑰創(chuàng)建一個(gè)符合編碼標(biāo)準(zhǔn)的?X509EncodedKeySpec
?????????
????????PublicKey?publicKey=keyFactory.generatePublic(x509EncodedKeySpec);???//密鑰工廠根據(jù)?標(biāo)準(zhǔn)密鑰規(guī)范的編碼?生成公鑰
?????????
????????DHParameterSpec?dhParameterSpec=DHPublicKey.class.cast(publicKey).getParams();??//從公鑰中獲取參數(shù)?
????????KeyPairGenerator?keyPairGenerator2=KeyPairGenerator.getInstance("DH");
????????keyPairGenerator2.initialize(1024);
????????keyPairGenerator2.initialize(dhParameterSpec);?//利用發(fā)送方傳遞的公鑰中獲取的參數(shù)?初始化密鑰生成器
????????KeyPair?receiverkeyPair=keyPairGenerator2.generateKeyPair();?//生成秘鑰
?????????
????????PrivateKey?receiverPrivateKey=receiverkeyPair.getPrivate();?//獲得私鑰
????????//獲得公鑰bytes??此公鑰用于傳遞給發(fā)送方
????????byte[]?receiverPbkBytes=receiverkeyPair.getPublic().getEncoded();//>>>>>>>>>>>>>>>>>>>>>>傳遞給發(fā)送方
?????????
????????//構(gòu)建接收方密鑰
????????KeyAgreement?keyAgreement=KeyAgreement.getInstance("DH");
????????keyAgreement.init(receiverPrivateKey);
????????keyAgreement.doPhase(publicKey,?true);
????????SecretKey?receiverSecretKey=keyAgreement.generateSecret("DES");?//接收方密鑰構(gòu)建完成
?????????
????????//構(gòu)建發(fā)送方密鑰---------------------------------------------------------------
????????KeyFactory?keyFactory2=keyFactory.getInstance("DH");
????????X509EncodedKeySpec?x509EncodedKeySpec2=new?X509EncodedKeySpec(receiverPbkBytes);
????????PublicKey?senderPublicKey=keyFactory2.generatePublic(x509EncodedKeySpec2);
????????KeyAgreement?keyAgreement2=KeyAgreement.getInstance("DH");
????????keyAgreement2.init(senderKeyPair.getPrivate());
????????keyAgreement2.doPhase(senderPublicKey,?true);
?????????
????????SecretKey?senderSecretKey?=keyAgreement2.generateSecret("DES");?//發(fā)送方密鑰構(gòu)建完成
?????????
?????????
????????//進(jìn)行加解密
????????String?str="imooc?security";
????????Cipher?cipher=Cipher.getInstance("DES");
????????cipher.init(Cipher.ENCRYPT_MODE,?senderSecretKey);
????????cipher.update(str.getBytes());
????????byte[]?bs=cipher.doFinal();
????????System.out.println("DH加密后:"+Hex.encodeHexString(bs));
?????????
????????cipher.init(Cipher.DECRYPT_MODE,?receiverSecretKey);
????????System.out.println("解密后:"+new?String(cipher.doFinal(bs)));
?????????
????}
}
2017-01-08
String str="imooc security";
? ? ? ? ? ?Cipher cipher=Cipher.getInstance("DES");
? ? ? ? ? ?cipher.init(Cipher.ENCRYPT_MODE, senderSecretKey);
? ? ? ? ? ?byte[] bs=cipher.doFinal(str.getBytes());