it-swarm.com.de

verschlüsseln Sie Daten in SharedPreferences

Ich entwickle gerade ein Framework für den Zugriff auf oAuth 1 und 2 auf Webservices. Meine Frage lautet: Wie kann ich vertrauliche Daten wie einen oAuth-Zugriffsschlüssel auf sichere Weise speichern? Das Problem bei diesen Schlüsseln ist, dass einige Plattformen wie Twitter einen permanenten Schlüssel verwenden. Wenn jemand Zugriff auf diesen Schlüssel erhält, kann er mit dem Twitter-Konto des Benutzers alles tun, was er will. 

ist es also möglich, die Daten automatisch zu verschlüsseln, bevor sie in den gemeinsamen Einstellungen gespeichert werden? Oder gibt es eine bessere Möglichkeit, sehr wichtige Daten zu speichern?

UPDATE - LESEN SIE AUCH: Was ist der beste Weg, um Benutzereinstellungen in der Android-Anwendung zu speichern

31
Simon Heinen

1). Wie verschlüsseln?

Unter Android erfolgt die Verschlüsselung über Java Cryptography Architecture (JCA). Hauptsächlich ist es das javax.crypto.*-Paket.

JCA-Referenzhandbuch

Hier ist ein Beispiel der JCA-API-Verwendung (insbesondere AES-Algorithmus).

2). Wo zu lagern

Die Verschlüsselungs-API kann mit Byte-Arrays (nicht mit Strings) bearbeitet werden. Dies bedeutet, dass Sie SharedPreferences verwenden können, aber Sie müssen die Base-64-Codierung auf das verschlüsselte Byte-Array anwenden, bevor Sie es in SharedPreferences ablegen (andernfalls kann der XML-Parser die freigegebene Voreinstellungsdatei nicht lesen). Zum Lesen müssen Sie dann die Base-64-Decodierung verwenden. Beachten Sie, dass die meisten Android-Betriebssysteme standardmäßig keine integrierte Base-64-API besitzen (siehe Abschnitt UPDATE). Um diesen Base-64-Overhead zu entfernen, würde ich nur empfehlen, Ihre Bytes in einer privaten Datei zu speichern.

UPDATE: Seit API Level 8 hat die API Android.util.Base64.

32
Vit Khudenko

Sie können sich auch diese Klasse ansehen, die ich für genau das gemacht habe: https://github.com/sveinungkb/encrypted-userprefs

Es verwendet AES anstelle des veralteten und schwachen DES, der im anderen Vorschlag verwendet wird.

50

Ich würde die Verwendung von Facebook Conceal für die Verschlüsselung auf Android fast immer empfehlen - es ist eine schnelle Android-Bibliothek, die einige wirklich vernünftige Entscheidungen trifft und Ihnen einige einfache Schnittstellen für die eigentliche Arbeit lässt.

Bonus! Ich habe vor kurzem ein Puzzle zusammengestellt, wie Sie es von Xamarin verwenden können - siehe meinen Artikel über Sicherung der Daten Ihrer C # App mithilfe von versteckt für weitere Informationen.

3
instantiator

Sie sollten einen Blick auf Slink werfen. Ich kam zu der Erkenntnis, dass die meisten SharedPreferences-Verschlüsselungstools für jede durchgeführte Aktion eine Verschlüsselung verwenden, was bedeutet, dass jedes Schlüssel-Wert-Paar nur gespeichert wird, nachdem Schlüssel und Wert separat verschlüsselt wurden. Dies verursacht einen großen Leistungsaufwand.

Also habe ich nach einer Bibliothek gesucht, die mir einen effizienteren Verschlüsselungsprozess ermöglicht, und ich habe Slink gefunden. Slink verwendet die Conceal-Bibliothek von Facbook, um die gesamte Karte der Objekte als Ganzes zu speichern, was sie zur effizientesten und schnellsten SharedPreferences-Verschlüsselungslösung macht. Außerdem werden die SharedPreferences-Schnittstellen von Android verwendet, was die Verwendung extrem einfach und nahezu nahtlos macht. Disclaimer: Ich bin Teil des Entwicklungsteams, das diese Bibliothek entwickelt.

3
Σrez Lankri

Siehe Duplikat: Verschleiern/Freigeben von SharedPreferences-Dateien möglich?

Hallo, ich habe eine SharedPreferences-Implementierung mit AES .__ erstellt. verschlüsselung. Das Projekt ist ein Maven-Modul. Wenn Sie eine benötigen, nehmen Sie eine aussehen. https://github.com/kovmarci86/Android-secure-preferences

2
Marcell

neue Verschlüsselung durch Facebook einführen - Verschlüsselung verbergen .. einfach zu bedienen

https://github.com/afiqiqmal/ConcealSharedPreference-Android

1
ZeroOne

Versuchen Sie es mit unserer https://github.com/BottleRocketStudios/Android-Vault Vault-Komponente. Es verwendet den Keystore von Android (auf unterstützten Geräten) oder eine Obfuscation-Technik, um Werte in einer SharedPreference-Datei zu verschlüsseln und die SharedPreference-Schnittstelle zu implementieren. 

1
caller9

Es gibt eine Android-Bibliothek, die Facebook-Conceal zum Verschlüsseln von Daten verwendet.

https://github.com/rtoshiro/SecureSharedPreferences

Maven Central:

compile 'com.github.rtoshiro.securesharedpreferences:securesharedpreferences:1.0.+'

0
Hamiseixas

Dieser Artikel über Codeprojekt enthält einen Nice-Wrapper für die gemeinsam genutzten Einstellungen. Der Klassenname SecurePreferences ist jedoch irreführend, da ObfuscatedPreferences eher geeignet ist. 

0
scottyab

Sie können die Daten in den Einstellungen verschlüsseln und den Verschlüsselungsschlüssel im Android Keystore System aufbewahren. Auf diese Weise wäre auch Ihr Verschlüsselungsschlüssel sicher.

Sie können dabei in eine Bibliothek schauen https://github.com/ophio/secure-preferences

0
Gaurav Vashisth