Ist AES/ CBC/ PKCS5Padding-Verschlüsselung-Entschlüsselung Algorithmus und dem SHA-1-hashing-Algorithmus nden Sie in alle Arten von Android-Geräten

Hatte ich versucht, führen Sie die folgenden AES/CBC/PKCS5Padding Verschlüsselungs-und Entschlüsselungs-code, mit SHA-1, als key generation, die Nexus-5. Es funktioniert sehr gut so weit.

Aber meine einzige Sorge ist, Ist AES/CBC/PKCS5Padding-Verschlüsselung-Entschlüsselung Algorithmus und dem SHA-1-hashing-Algorithmus zur Verfügung, die in alle Arten von Android-Geräten?

Gibt es eine chance, dass der folgende code wird nicht ausgeführt, auf bestimmten Android-Geräten? Wenn ja, gibt es eine fall-back-plan?

AES/CBC/PKCS5Padding

//http://stackoverflow.com/questions/3451670/java-aes-and-using-my-own-key
public static byte[] generateKey(String key) throws GeneralSecurityException, UnsupportedEncodingException {
    byte[] binary = key.getBytes("UTF-8");
    MessageDigest sha = MessageDigest.getInstance("SHA-1");
    binary = sha.digest(binary);
    //Use only first 128 bit.
    binary = Arrays.copyOf(binary, 16);
    return binary;
}

//http://stackoverflow.com/questions/17322002/what-causes-the-error-java-security-invalidkeyexception-parameters-missing
public static String encrypt(byte[] key, String value) throws GeneralSecurityException {
    //Argument validation.
    if (key.length != 16) {
        throw new IllegalArgumentException("Invalid key size.");
    }

    //Setup AES tool.
    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));

    //Do the job with AES tool.
    byte[] original = value.getBytes(Charset.forName("UTF-8"));
    byte[] binary = cipher.doFinal(original);
    return Base64.encodeToString(binary, Base64.DEFAULT);
}

////http://stackoverflow.com/questions/17322002/what-causes-the-error-java-security-invalidkeyexception-parameters-missing
public static String decrypt(byte[] key, String encrypted) throws GeneralSecurityException {
    //Argument validation.
    if (key.length != 16) {
        throw new IllegalArgumentException("Invalid key size.");
    }

    //Setup AES tool.
    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));

    //Do the job with AES tool.
    byte[] binary = Base64.decode(encrypted, Base64.DEFAULT);
    byte[] original = cipher.doFinal(binary);
    return new String(original, Charset.forName("UTF-8"));
}

Nutzung

byte[] key = generateKey("my secret key");
String ciphertext = encrypt(key, "my plain content");
String plainContent = decrypt(key, ciphertext);
  • Probieren Sie es aus in allen verfügbaren emulator-Bilder, aber ich sehe keinen Grund, dieser sollte nicht überall durchgesetzt. Wenn Sie noch nicht wollen, es selbst zu versuchen, dann verwenden Sie die BouncyCastle/SpongyCastle provider standardmäßig.
  • mögliche Duplikate von Was crypto algroithms hat Android Support
  • Ich finde, dass ist ein bisschen übertreiben es mit Bezug auf diese Frage. Dies bedeutet, dass der Fragesteller noch zum testen auf alle Emulatoren, etwas können Sie nur wollen, zu tun, nachdem Sie eine Anwendung entwickeln.
Schreibe einen Kommentar