簡體   English   中英

java RSA多重加密

[英]java RSA Multiple Encryption

我使用對稱密鑰加密我的消息,並且對稱密鑰本身必須使用不同的RSA公鑰進一步加密。 當我嘗試實現上述內容時,出現以下錯誤:

javax.crypto.IllegalBlockSizeException: The input was invalid: Invalid input length.
        at com.rsa.shareCrypto.j.hD.engineDoFinal(Unknown Source)
        at javax.crypto.Cipher.doFinal(Cipher.java:2087)
        at wrap1.main(wrap1.java:69)

有沒有辦法解決這個問題?

我需要做這樣的[[[[key] PK-A] PK-B] PK-C],其中PK-A = A的公鑰,類似PK-B和PK-C。

以下是我在這里嘗試的代碼是代碼

String InitialKey = "2011BCSChampionA";

byte[] initkey = InitialKey.getBytes();
// First level encryption of the key

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");

keyGen.initialize(1024);
KeyPair keypair = keyGen.genKeyPair();
PrivateKey privateKey = keypair.getPrivate();
PublicKey publicKey = keypair.getPublic();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherData = cipher.doFinal(initkey);
// Second level of encryption
KeyPairGenerator keyGen1 = KeyPairGenerator.getInstance("RSA");
keyGen1.initialize(1024);
KeyPair keypair1 = keyGen1.genKeyPair();
PrivateKey prvKey = keypair1.getPrivate();
PublicKey pubKey = keypair1.getPublic();
Cipher cipher1 = Cipher.getInstance("RSA");
cipher1.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData_new = cipher1.doFinal(cipherData);

您應該填充數據以滿足加密算法要求,或者您應該創建指向要使用的填充的Cipher類實例,例如:

cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

當您需要使用非對稱密鑰時,請按以下方式初始化密碼:

cipher = Cipher.getInstance("RSA/ECB/PKCS5Padding");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM