為什么加密的字符串過長時,解密后長度丟失?
public??class?DH?{
public?static?void?main(String[]?args)throws?Exception{
//初始化發送方密鑰----------------------------------------------------------------
KeyPairGenerator?keyPairGenerator=KeyPairGenerator.getInstance("DH");
keyPairGenerator.initialize(1024);
KeyPair?senderKeyPair=keyPairGenerator.generateKeyPair();
byte[]?senderPbkEnc=senderKeyPair.getPublic().getEncoded();//得到發送方公鑰的??byte數組形式;>>>>>>>>>>>>>>>>>-傳遞給接受方
//使用發送方密鑰中的參數?初始化接收方的密鑰載體------------------------------------------------
KeyFactory?keyFactory=KeyFactory.getInstance("DH");
X509EncodedKeySpec?x509EncodedKeySpec=new?X509EncodedKeySpec(senderPbkEnc);?//根據發送方給定的編碼密鑰創建一個符合編碼標準的?X509EncodedKeySpec
PublicKey?publicKey=keyFactory.generatePublic(x509EncodedKeySpec);???//密鑰工廠根據?標準密鑰規范的編碼?生成公鑰
DHParameterSpec?dhParameterSpec=DHPublicKey.class.cast(publicKey).getParams();??//從公鑰中獲取參數?
KeyPairGenerator?keyPairGenerator2=KeyPairGenerator.getInstance("DH");
keyPairGenerator2.initialize(1024);
keyPairGenerator2.initialize(dhParameterSpec);?//利用發送方傳遞的公鑰中獲取的參數?初始化密鑰生成器
KeyPair?receiverkeyPair=keyPairGenerator2.generateKeyPair();?//生成秘鑰
PrivateKey?receiverPrivateKey=receiverkeyPair.getPrivate();?//獲得私鑰
//獲得公鑰bytes??此公鑰用于傳遞給發送方
byte[]?receiverPbkBytes=receiverkeyPair.getPublic().getEncoded();//>>>>>>>>>>>>>>>>>>>>>>傳遞給發送方
//構建接收方密鑰
KeyAgreement?keyAgreement=KeyAgreement.getInstance("DH");
keyAgreement.init(receiverPrivateKey);
keyAgreement.doPhase(publicKey,?true);
SecretKey?receiverSecretKey=keyAgreement.generateSecret("DES");?//接收方密鑰構建完成
//構建發送方密鑰---------------------------------------------------------------
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");?//發送方密鑰構建完成
//進行加解密
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)));
}
}最后控制臺輸出 的事?curity ? 前面部分消失了
2016-01-25
????????????String str="imooc security";
? ? ? ? ? ?Cipher cipher=Cipher.getInstance("DES");
? ? ? ? ? ?cipher.init(Cipher.ENCRYPT_MODE, senderSecretKey);
? ? ? ? ? ?byte[] bs=cipher.doFinal(str.getBytes());
加密代碼改成這樣就行了