0

メッセージを対称鍵で暗号化し、対称鍵自体を別の 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);
4

1 に答える 1

2

暗号化アルゴリズムの要件を満たすためにデータをCipherパディングするか、使用するパディングを指すクラスのインスタンスを作成する必要があります。

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

非対称鍵を使用する必要があるため、次の方法で暗号を初期化します。

cipher = Cipher.getInstance("RSA/ECB/PKCS5Padding");
于 2012-10-21T20:45:33.790 に答える