為什么加密的字符串過長時(shí),解密后長度丟失?
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))); } }
最后控制臺(tái)輸出 的事?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());
加密代碼改成這樣就行了