2014-11-24 190 views
-3

我們可以使用ECC加密大文件嗎?或者它就像RSA僅適用於小型文件?任何人都可以推薦一個用於ECC Java實現的好網站。Java中的ECC加密和解密

感謝

+0

java.security.InvalidKeyException:格式錯誤:需要RAW字節...當IO嘗試使用Sun提供程序對ECC文件進行加密時,出現此錯誤。任何人都可以知道是什麼導致了這個錯誤 – 2014-11-24 19:14:02

+0

任何人都可以告訴我如何設置FlexiProvider的類路徑使用它的ECC算法@ Artjom B. – 2014-11-24 20:28:07

回答

2

一般來說,你是需要與ECC進行hybrid encryption。例如,ECIES基本上是對稱加密之後的一個關鍵協議。所以你不能直接用ECIES加密任何東西,ECIES是最常用的ECC加密方法。基本上你應該把它和對稱密碼結合起來。這實際上也是大部分時間RSA加密的最佳方案。


正如你可以看到可以使用CBC模式& PKCS#7填充直接使用此作爲Cipher,但大的報頭的提防(117個字節384曲線,沒有更小)。這是執行密鑰派生所必需的。確保公鑰是經過適當驗證(我不確定Bouncy Castle的代碼在這方面,沒有看過它)。

public static void main(String[] args) throws Exception { 
    Security.addProvider(new BouncyCastleProvider()); 

    KeyPairGenerator ecKeyGen = KeyPairGenerator.getInstance("EC", BouncyCastleProvider.PROVIDER_NAME); 
    ecKeyGen.initialize(new ECGenParameterSpec("brainpoolP384r1")); 

    // doesn't work, which means we are dancing on the leading edge :) 
    // KeyPairGenerator ecKeyGen = KeyPairGenerator.getInstance("EC"); 
    // ecKeyGen.initialize(new ECGenParameterSpec("secp384r1")); 

    KeyPair ecKeyPair = ecKeyGen.generateKeyPair(); 
    System.out.println("What is slow?"); 

    Cipher iesCipher = Cipher.getInstance("ECIESwithAES"); 
    iesCipher.init(Cipher.ENCRYPT_MODE, ecKeyPair.getPublic()); 

    byte[] ciphertext = iesCipher.doFinal(com.google.common.base.Strings.repeat("owlstead", 1000).getBytes()); 

    iesCipher.init(Cipher.DECRYPT_MODE, ecKeyPair.getPrivate()); 
    byte[] plaintext = iesCipher.doFinal(ciphertext); 

    System.out.println(Hex.toHexString(ciphertext)); 
    System.out.println(new String(plaintext)); 
} 
+0

BUT什麼是Bouncy Castle爲ECC提供的實現,它是否也使用對稱算法它......也可以用它來加密大文件嗎? @owlstead ..非常感謝 – 2014-11-25 09:55:33

+0

當然。在1.51中,它使用CBC加密,所以應該是安全的機密(**如果**填充的話是不可能的)。被警告以前的版本[使用ECB](http://bouncy-castle.1462172.n4.nabble.com/ECC-with-ECIES-Encrypt-Decrypt-Questions-td4656750.html),這是不安全的。 – 2014-11-25 23:59:24