亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么加密的字符串過長時,解密后長度丟失?

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 ? 前面部分消失了

正在回答

1 回答

????????????String str="imooc security";

? ? ? ? ? ?Cipher cipher=Cipher.getInstance("DES");

? ? ? ? ? ?cipher.init(Cipher.ENCRYPT_MODE, senderSecretKey);

? ? ? ? ? ?byte[] bs=cipher.doFinal(str.getBytes());

加密代碼改成這樣就行了

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么加密的字符串過長時,解密后長度丟失?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號