2017-08-29 4 views
-1

Was ich versuche, einen String in einen Byte [] zu tun ist, konvertieren, aber ich brauche das Byte [] Größe64 Bytes sein immer , unabhängig davon, welche Zeichenfolge an der Eingabe ist, um mit Realm-Verschlüsselung verwendet zu werden, aber nach etwas Forschung konnte ich nichts Ähnliches finden, oder gibt es irgendeine andere Weise, die ich eine Zeichenkette als die Reichsverschlüsselung benutzen kann?String byte [] mit einer definierten Größe

Dies ist mein Code:

String passphrase = "ASDYB982234235512"; 
byte[] key = passphrase.getBytes(); 
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder() 
       .encryptionKey(key) 
       .build(); 

Dies ist der Fehler:

java.lang.IllegalArgumentException: The provided key must be 64 bytes. Yours was: 17

+0

Suchen Sie nach einer Hash-Funktion? Was möchten Sie tun, wenn der String mehr als 64 Bytes lang ist? –

+0

Ich bin auf der Suche nach einer Möglichkeit, eine Zeichenfolge in die Realm-Verschlüsselung zu verwenden, wenn es größer als 64 nicht erlaubt, diese Zeichenfolge verwenden, aber wenn es kürzer ist, füllen Sie die Leerzeichen irgendwie mit der gleichen Zeichenfolge –

+2

Wenn die Eingabezeichenfolge ist weniger als 64 Bytes lang und es muss 64 Bytes sein, jemand (vielleicht Obama) muss die Eingabe ausfüllen, bis es 64 Bytes lang ist. – DwB

Antwort

-1

Versuchen Sie, die String-Codierung mit Base64.encode, ich denke, die Ausgabe für Sie nützlich sein wird.

Oder versuchen, eine Zeichenfolge mit 64 Zeichen in es Ihrem aktuellen Passwort verwenden enthält 17 Zeichen

+0

Bereits versucht, Codierung auf Base64 nicht füllt die 64bytes, und ich kann nicht eine fest codierte Zeichenfolge verwenden, da die Verschlüsselungskette dynamisch für jeden Benutzer ändert –

+0

haben Sie die zusätzliche Polsterung entfernt, die kommt die Form von == während der Codierung über die Basis 64 Versuchen Sie die Codierung mit base64 und verwenden Sie nur den Text und lassen Sie den == Teil oder verwenden Sie NO_PADDING Flag während der Codierung – Anshul

3

Sie ein Key Derivation Function verwenden möge, einen Verschlüsselungsschlüssel von dem Benutzer Passwort zu generieren. Die einfachste Form besteht darin, der Passphrase des Benutzers ein Salt hinzuzufügen und sie dann in SHA-2 zu füttern, um einen 256-Bit-Hash zu erhalten. Idealerweise möchten Sie jedoch etwas wie scrypt verwenden, um das Erzwingen der Passphrase zu erschweren.

1

Hier https://android-developers.googleblog.com/2013/02/using-cryptography-to-store-credentials.html Sie die Funktion finden Sie (Ich habe gerade die Schlüsselgröße) verwenden können:

public static SecretKey generateKey(char[] passphraseOrPin, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException { 
    // Number of PBKDF2 hardening rounds to use. Larger values increase 
    // computation time. You should select a value that causes computation 
    // to take >100ms. 
    final int iterations = 1000; 

    // Generate a 512-bit key 
    final int outputKeyLength = 512; 

    SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
    KeySpec keySpec = new PBEKeySpec(passphraseOrPin, salt, iterations, outputKeyLength); 
    SecretKey secretKey = secretKeyFactory.generateSecret(keySpec); 
    return secretKey; 
} 

Und dann secretKey.getEncoded() verwenden.

Salz zu erzeugen:

final Random secureRandom = new SecureRandom(); 
byte[] salt = new byte[32]; 
secureRandom.nextBytes(salt); 

Denken Sie daran, um das Salz zu sparen und es irgendwo halten (in den Einstellungen zum Beispiel).