Ich möchte ein RSA-Schlüsselpaar im Android Keystore generieren. Seit Android 4.3 soll es möglich sein RSA-Schlüssel im Android-Keystore zu generieren.Android KeyStore privaten Exponenten kann nicht extrahiert werden
ich generieren mein RSA-Schlüssel durch (funktioniert)
Calendar notBefore = Calendar.getInstance();
Calendar notAfter = Calendar.getInstance();
notAfter.add(1, Calendar.YEAR);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx)
.setAlias("key")
.setSubject(
new X500Principal(String.format("CN=%s, OU=%s",
"key", ctx.getPackageName())))
.setSerialNumber(BigInteger.ONE)
.setStartDate(notBefore.getTime())
.setEndDate(notAfter.getTime()).build();
KeyPairGenerator kpg;
kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpg.initialize(spec);
KeyPair kp = kpg.genKeyPair();
publicKey = kp.getPublic();
privateKey = kp.getPrivate();
mein RSA-Verschlüsselung sieht aus wie (funktioniert auch):
public static byte[] RSAEncrypt(final byte[] plain)
throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance("RSA");
System.out.println("RSA Encryption key: " + publicKey.getAlgorithm());
System.out.println("RSA Encryption key: " + publicKey.getEncoded());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(plain);
return encryptedBytes;
}
Entschlüsselung:
public static byte[] RSADecrypt(final byte[] encryptedBytes)
throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher1 = Cipher.getInstance("RSA");
System.out.println("RSA Encryption key: " + privateKey.getAlgorithm());
System.out.println("RSA Encryption key: " + privateKey.getEncoded());
cipher1.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher1.doFinal(encryptedBytes);
return decryptedBytes;
}
In der Entschlüsselung Funktion Ich bekomme die folgende Fehlermeldung (wenn der privateKey codiert ist, und in cipher1.init()):
12-12 21:49:40.338: E/AndroidRuntime(20423): FATAL EXCEPTION: main
12-12 21:49:40.338: E/AndroidRuntime(20423): java.lang.UnsupportedOperationException: private exponent cannot be extracted
12-12 21:49:40.338: E/AndroidRuntime(20423): at org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey.getPrivateExponent(OpenSSLRSAPrivateKey.java:143)
Ich verstehe es nicht. Ist es nicht möglich, einen RSA-Schlüssel im Android KeyStore zu generieren? Kann mir jemand ein Beispiel für die Generierung eines RSA-Schlüssels im Android KeyStore geben und ihn mit dem privaten Schlüssel entschlüsseln?
Vielen Dank im Voraus!
'BigInteodeger' sollte sei 'BigInteger', kann aber nicht bearbeitet werden, da die Änderung weniger als 6 Zeichen beträgt. :( –
Danke Mark. Ich habe den Beitrag aktualisiert. – Jcs
Gibt es eine Möglichkeit, dies mit SpongyCastle für die Rückwärtskompatibilität arbeiten? – zubietaroberto