私は現在Java上でRSA暗号化を行っています。私は暗号化のために私的および公的モジュラスを使用する必要があります。私は、次の取得コンソールでJavaでモジュラスと指数を使用するRSA暗号
createPrivateKey();
createPublicKey();
String data = "12";
Cipher cipher1 = Cipher.getInstance("RSA/ECB/NoPadding");
cipher1.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher1.doFinal(data.getBytes());
Cipher cipher2 = Cipher.getInstance("RSA/ECB/NoPadding");
cipher2.init(Cipher.DECRYPT_MODE,privateKey);
byte[] decryptedData = cipher2.doFinal(encryptedData);
System.out.println(new String(decryptedData));
:私は以下の持っている主な方法で
private void createPublicKey() throws NoSuchAlgorithmException, InvalidKeySpecException {
String publicModulus = "d2c34017ef94f8ab6696dae66e3c0d1ad186bbd9ce4461b68d7cd017c15bda174045bfef36fbf048" +
"73cfd6d09e3806af3949f99c3e09d6d3c37f6398d8c63f9a3e39b78a187809822e8bcf912f4c44a8" +
"92fe6a65a477ddea9582738317317286a2610ba30b6b090c3b8c61ffb64207229b3f01afe928a960" +
"c5a44c24b26f5f91";
BigInteger keyInt = new BigInteger(publicModulus, 16);
BigInteger exponentInt = new BigInteger("10001", 16);
RSAPublicKeySpec keySpeck = new RSAPublicKeySpec(keyInt, exponentInt);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
publicKey = keyFactory.generatePublic(keySpeck);
}
private void createPrivateKey() throws NoSuchAlgorithmException, InvalidKeySpecException {
String privateModulus = "6c97ab6369cf00dd174bacd7c37e6f661d04e5af10670d4d88d30148ec188e63227b8dac0c517cf9" +
"67aa73cd23684c9165dc269f091bfab33b6c5c7db95b54130e348255c30aaaac1c7f09ef701e0d6f" +
"6dc142d2e4ed78466cc104e28d50be7adf3863afc021dbdd8b5f0b968b7cd965242c7d8d4b32ee84" +
"0fac3cad134344c1";
BigInteger privateModulusInt = new BigInteger(privateModulus, 16);
BigInteger exponentInt = new BigInteger("10001", 16);
RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(privateModulusInt, exponentInt);
KeyFactory factory = KeyFactory.getInstance("RSA");
privateKey = factory.generatePrivate(privateKeySpec);
}
:私は現在、以下の持っている.7pを;%のキロボルト私がString data = "12345";
を作成した場合、私は次のようになります:javax.crypto.BadPaddingException: Message is larger than modulus
まず、暗号化と復号化が機能しないのはなぜですか?なぜ私は戻って来ない"12"
。第二に、データを2文字以上にすることができないのはなぜですか?
注モジュラスと指数の値を得るには、次のようなwebsiteを使用しています。
非公開指数の代わりに公開指数を使用します。 RSAに公的モジュラスや私的モジュラスはありません。公的および私的指数を持つ1つのモジュラスがあります。そして、CRTの代わりに私的指数を直接使用することは、約30年が経過しています。そしてそのウェブサイトはその歴史的なメモについても間違っています。一言で言えば、それに頼らないでください。 –
正確な診断@ dave_thompson_085、私はあなたの推薦を追加しました。ありがとう – pedrofb