2015-04-07 97 views

回答

2

使用非對稱加密,無法加密數據的時間長於鍵減去填充。由於它是11個字節,我可以得出結論,您使用PKCS#1填充。你可以做的是嘗試壓縮數據,但根據數據的長度和性質,它很容易失敗。另一種選擇是對稱塊密碼(沒有限制用於數據的大小)和非對稱加密相結合:

  1. 生成隨機的AES密鑰

    byte[] keyData = new byte[32]; 
    SecureRandom random = new SecureRandom(); 
    random.nextBytes(keyData); 
    
  2. 加密數據與AES。

    // zero filled input vector 
    byte[] ivData = new byte[32]; 
    IvParameterSpec iv = new IvParameterSpec(ivData); 
    SecretKeySpec keySpec = new SecretKeySpec(keyData, "AES"); 
    Cipher aes = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
    aes.init(Cipher.ENCRYPT_MODE, keySpec, iv); 
    byte[] cipherText = aes.doFinal(data); 
    
  3. AES加密密鑰(用於AES-256是32個字節),RSA私鑰。

    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.WRAP_MODE, rsaKeyPair.getPublic()); 
    byte[] wrappedKey = cipher.doFinal(keyData); 
    
  4. 將wrappedKey與cipherText結合使用。可以通過將一個附加到另一個來完成,但也可以使用一些二進制格式。