Довольно просто сгенерировать пару открытых / закрытых ключей из файла (ов) ресурсов и использовать их для шифрования / дешифрования в приложении для Android.Тем не менее, следующий код НЕ правильно восстанавливает открытый текст при запуске с эмулятором Android-x86-v4.4.4 в VirtualBox.Может ли кто-нибудь указать, что не так с этим кодом (он не выдает никакой ошибки или генерирует какие-либо исключения): (Изменение Cipher.getInstance ("RSA / NONE / NoPadding") также не поможет)
PublicKey mPublicKey = null;
PrivateKey mPrivateKey = null;
String mPlainText = "The quick brown fox jumped over the lazy dog" ;
byte[] mEncryptText = null;
byte[] mDecryptText = null;
try {
InputStream mIS = getResources().openRawResource(R.raw.test1_public_key);
DataInputStream dis = new DataInputStream(mIS);
byte [] keyBytes = new byte [(int) mIS.available()];
dis.readFully(keyBytes);
dis.close();
mIS.close();
X509EncodedKeySpec mX509KeySpec = new X509EncodedKeySpec(keyBytes);
mPublicKey = (KeyFactory.getInstance("RSA")).generatePublic(mX509KeySpec);
Toast.makeText(this, "Publickey generated", Toast.LENGTH_LONG).show();
}
catch(Exception e){
Log.e("onButtondecrypt", "exception", e);
Log.e("onButtondecrypt", "exception: " + Log.getStackTraceString(e));
}
try {
InputStream mIS = getResources().openRawResource(R.raw.test1_private_key);
DataInputStream dis = new DataInputStream(mIS);
byte [] keyBytes = new byte [(int) mIS.available()];
dis.readFully(keyBytes);
dis.close();
mIS.close();
PKCS8EncodedKeySpec mPKCS8keySpec = new PKCS8EncodedKeySpec(keyBytes);
mPrivateKey = (KeyFactory.getInstance("RSA")).generatePrivate(mPKCS8keySpec);
Toast.makeText(this, "PRIVATE key generated", Toast.LENGTH_LONG).show();
}
catch(Exception e){
Log.e("onButtondecrypt", "exception", e);
Log.e("onButtondecrypt", "exception: " + Log.getStackTraceString(e));
}
Toast.makeText(this, mPlainText, Toast.LENGTH_LONG).show();
Toast.makeText(this, "Encrypting with Publickey ...", Toast.LENGTH_LONG).show();
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, mPublicKey);
mEncryptText = cipher.doFinal(mPlainText.getBytes());
Toast.makeText(this, mEncryptText.toString(), Toast.LENGTH_LONG).show();
}
catch(Exception e){
Log.e("onButtondecrypt", "exception", e);
Log.e("onButtondecrypt", "exception: " + Log.getStackTraceString(e));
}
Toast.makeText(this, "Decrypting with PRIVATE key ...", Toast.LENGTH_LONG).show();
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, mPrivateKey);
mDecryptText = cipher.doFinal(mEncryptText);
Toast.makeText(this, mDecryptText.toString(), Toast.LENGTH_LONG).show();
}
catch(Exception e){
Log.e("onButtondecrypt", "exception", e);
Log.e("onButtondecrypt", "exception: " + Log.getStackTraceString(e));
}
Спасибо всем.