Mam prywatny plik kluczy PEM, używam tego pliku do podpisywania i szyfrowania danych. Podpisanie działa dobrze i jestem też w stanie sprawdzić na innej platformie, ale podczas szyfrowania danych, otrzymuję następujący błąd:Otrzymywanie błędu java.lang.ArrayIndexOutOfBoundsException: zbyt dużo danych dla bloku RSA
04-04 09:55:51.821: E/AndroidRuntime(2725): FATAL EXCEPTION: Thread-102
04-04 09:55:51.821: E/AndroidRuntime(2725): java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
04-04 09:55:51.821: E/AndroidRuntime(2725): at com.android.org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(JCERSACipher.java:457)
04-04 09:55:51.821: E/AndroidRuntime(2725): at javax.crypto.Cipher.doFinal(Cipher.java:1106)
04-04 09:55:51.821: E/AndroidRuntime(2725): at com.example.testsigning.MainActivity.rsaEncrypt(MainActivity.java:185)
04-04 09:55:51.821: E/AndroidRuntime(2725): at com.example.testsigning.MainActivity$1.run(MainActivity.java:51)
04-04 09:55:51.821: E/AndroidRuntime(2725): at java.lang.Thread.run(Thread.java:856)
Poniżej znajduje się fragment kodu, aby wyodrębnić klucze od prywatnej pliku:
// Read the file into string
String privKeyPEM = readFile("/mnt/sdcard/rsa_key");
privKeyPEM = privKeyPEM.replace("-----BEGIN RSA PRIVATE KEY-----", "");
privKeyPEM = privKeyPEM.replace("-----END RSA PRIVATE KEY-----", "");
// Base64 decode the data
byte[] encoded = Base64.decode(privKeyPEM, Base64.DEFAULT);
// PKCS8 decode the encoded RSA private key
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
mPrivKey = kf.generatePrivate(keySpec);
RSAPrivateCrtKey privk = (RSAPrivateCrtKey) mPrivKey;
RSAPublicKeySpec pubKeySpec = new java.security.spec.RSAPublicKeySpec(
privk.getPublicExponent(), privk.getModulus());
mPubKey = kf.generatePublic(pubKeySpec);
A Poniżej znajduje się fragment kodu zaszyfrować dane:
Cipher cipher = Cipher.getInstance("RSA/None/OAEPWithSHA1AndMGF1Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, mPubKey);
return cipher.doFinal("Hello World".getBytes()); // here is the problem
Każda pomoc w celu rozwiązania problemu byłoby bardzo mile widziane.
Pozdrowienia, YuVI
oznacza, że Twoja tablica ma mniej niż 1 rekord. debugowania, otrzymasz pomysł, gdzie jest problem –
sprawdzić ten post http://stackoverflow.com/questions/2579103/too-much-data-for-rsa-block-fail-what-is-pkcs7 –
@ chintankhetiya może rozwinąć trochę więcej, o której macie mówić. – Yuvi