wake-up-neo.net

Android-Verschlüsselung

Ich arbeite an einer Android-Anwendung und muss für einen Aspekt die Verschlüsselung verwenden. Es ist mir völlig egal, welchen Algorithmus ich verwende (AES, DES, RSA usw.). Mir ist bekannt, dass Java ein Kryptopaket enthält, aber ich bin damit überhaupt nicht vertraut. Kann jemand ein Beispiel zur Durchführung einer Verschlüsselungs-/Entschlüsselungsfunktion posten?

Die Java AES-Bibliothek hat einen Fehler, der es einem Listener ermöglicht, die gesendeten Pakete unter den richtigen Umständen zu entschlüsseln. Siehe Auffüllen von Oracle Exploit Tool gegen Apache MyFaces

Schauen Sie sich diese SO Frage Java 256-Bit-AES-Verschlüsselung an.

Bouncy Castle AES BEISPIEL gestohlen von: http://www.Java2s.com/Code/Java/Security/EncryptionanddecryptionmitAESECBPKCS7Padding.htm

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class MainClass {
  public static void main(String[] args) throws Exception {
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());    
    byte[] input = "www.Java2s.com".getBytes();
    byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 
                 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 
                 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 
                 0x15, 0x16, 0x17 };

    SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

    System.out.println(new String(input));

    // encryption pass
    cipher.init(Cipher.ENCRYPT_MODE, key);

    byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
    int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    ctLength += cipher.doFinal(cipherText, ctLength);
    System.out.println(new String(cipherText));
    System.out.println(ctLength);

    // decryption pass
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] plainText = new byte[cipher.getOutputSize(ctLength)];
    int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
    ptLength += cipher.doFinal(plainText, ptLength);
    System.out.println(new String(plainText));
    System.out.println(ptLength);
  }
}
14
Ethan Heilman

Ich würde auch bei Conceal nachschauen, ob es zu Ihrer Rechnung passt. Es verfügt über eine einfach zu verwendende API, die die kryptografischen Details zusammenfasst: https://github.com/facebook/conceal/

1
user868459

Sehen Sie sich meine Antwort hier an Android-Datenbankverschlüsselung . Es enthält 2 Dateien, die Sie in jede Ihrer Anwendungen aufnehmen können, für die der Datenspeicher verschlüsselt werden muss.

1
Plo_Koon

Angesichts des Overheads zum Verschlüsseln und Entschlüsseln von Daten in Android habe ich eine Bibliothek entwickelt, die nur in Android- und Java-eigenen Bibliotheken verwendet wird, um den Prozess so einfach wie möglich zu gestalten.

Verwenden Sie zur Installation das jcenter-Verteilungszentrum. On gradle: 

compile 'com.tinmegali.Android:mcipher:0.4'

Verwendung

String ALIAS = "alias"
MEncryptor encryptor = new MEncryptorBuilder( ALIAS ).build();
MDecryptor decryptor = new MDecryptorBuilder( ALIAS ).build();

String toEncrypt = "encrypt this string";
// encrypting
String encrypted = encryptor.encryptString( toEncrypt, this );

// decrypting
String decrypted = decryptor.decryptString( encrypted, this );

MCipher ist ab SDK 19+ kompatibel und passt sich automatisch an kleinere und große Datenblöcke an. Standardmäßig werden AES/GCM/NoPadding für die SDKs 23+ und RSA/ECB/PKCS1Padding für ältere Versionen verwendet.

MCipher auf Github

0
Tin Megali