Je construis une application android qui a besoin de stocker des données sécurisées sur un appareil Android qui supporte également une ancienne version d'android avant 4.0. Je sais que Android 4.0 et la version après cette chaîne de clé de soutien, mais mon application doit prendre en charge les anciennes versions. Donc, n'importe qui peut aider et laissez-moi savoir quelle méthode utilisée dans la version OS d'Android.Comment ancienne version d'android avant 4.0 stocker des données comme mot de passe, accesstoken en toute sécurité?
Répondre
Sur les versions Android précédentes à ICS, vous pouvez utiliser KeyStore
, voici un exemple de stockage à KeyStore
:
public boolean setEntry(String alias, String secretKey) {
boolean keyStoreEntryWritten = false;
if (mKeystore != null && secretKey != null) {
// store something in the key store
SecretKeySpec sks = new SecretKeySpec(secretKey.getBytes(), "MD5");
KeyStore.SecretKeyEntry ske = new KeyStore.SecretKeyEntry(sks);
KeyStore.ProtectionParameter pp = new KeyStore.PasswordProtection(null);
try {
mKeystore.setEntry(alias, ske, pp);
// save key store
boolean success = saveKeyStore();
if (success) {
keyStoreEntryWritten = true;
}
} catch (KeyStoreException ex) {
Log.e(TAG, "Failed to read keystore" + mKeyStoreName);
}
}
return keyStoreEntryWritten;
}
private boolean saveKeyStore() {
FileOutputStream fos = null;
boolean keyStoreSaved = true;
// generate key store path
String keyStoreFilePath = generateKeyStoreFilePath(mKeyStoreName, mKeystoreDirectoryPath);
try {
fos = new FileOutputStream(keyStoreFilePath);
mKeystore.store(fos, mKeyStorePassword.toCharArray());
} catch (Exception ex) {
keyStoreSaved = false;
Log.e(TAG, "Failed to save keystore " + mKeyStoreName);
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException ex) {
keyStoreSaved = false;
Log.e(TAG, "Failed to close FileOutputStream");
}
}
}
return keyStoreSaved;
}
Vous pouvez trouver plus d'informations ici: http://developer.android.com/reference/java/security/KeyStore.html
EDIT: ici est la façon dont vous récupérez une clé:
public String getEntry(String alias) {
String secretStr = null;
byte[] secret = null;
if (mKeystore != null) {
try {
if (!mKeystore.containsAlias(alias)) {
Log.w(TAG, new StringBuilder().append("Keystore ").append(mKeyStoreName)
.append(" does not contain entry ").append(alias).toString());
return null;
}
} catch (KeyStoreException ex) {
Log.e(TAG, "Failed to read keystore entry " + alias);
}
// get my entry from the key store
KeyStore.ProtectionParameter pp = new KeyStore.PasswordProtection(null);
KeyStore.SecretKeyEntry ske = null;
try {
ske = (KeyStore.SecretKeyEntry) mKeystore.getEntry(alias, pp);
} catch (Exception ex) {
Log.e(TAG, "Failed to read keystore entry " + alias);
}
if (ske != null) {
SecretKeySpec sks = (SecretKeySpec) ske.getSecretKey();
secret = sks.getEncoded();
if (secret != null) {
secretStr = new String(secret);
} else {
Log.e(TAG, new StringBuilder().append("Read empty keystore entry ").append(alias).toString());
}
} else {
Log.e(TAG, "Failed to read keystore entry " + alias);
}
}
return secretStr;
}
Merci à nous. C'est vraiment utile, mais maintenant mon souci est que je dois stocker secretKey quelque part à droite et ainsi de nouveau la question se pose de savoir comment le stocker en toute sécurité? Corrigez-moi si je me trompe. – user1522804
J'ai ajouté un exemple de récupération de la clé - espérons que cela aide –
Encore une fois merci inistel. Après avoir regardé le code, j'ai toujours des inquiétudes sur le mKeyStorePassword. Est-ce sûr, je veux dire, si je comprends bien, il peut y avoir un accès et il n'y a pas de sécurité pour ça? Corrigez-moi si je me trompe. – user1522804
- 1. Comment stocker en toute sécurité des informations d'enregistrement/de connexion comme un mot de passe?
- 2. Transmettre et stocker des mots de passe en toute sécurité
- 3. Comment enregistrer temporairement un mot de passe en toute sécurité?
- 4. La meilleure façon de stocker des données en toute sécurité?
- 5. Toute façon de stocker un mot de passe en toute sécurité dans une application
- 6. comment stocker les données de connexion mysql en toute sécurité?
- 7. Comment stocker en toute sécurité un mot de passe dans un fichier?
- 8. Stocker des données en toute sécurité en javascript (autosuggestions)
- 9. Quel est le meilleur moyen de stocker le mot de passe en toute sécurité (hachages)
- 10. Comment stocker en toute sécurité les mots de passe pour une utilisation côté serveur?
- 11. Stocker des données en toute sécurité sur iOS
- 12. Comment stocker des mots de passe en toute sécurité sur un service Web tiers dans ma base de données?
- 13. Comment enregistrer en toute sécurité un mot de passe avec jQM et PhoneGap?
- 14. Comment télécharger et stocker en toute sécurité des documents utilisateur?
- 15. Comment puis-je stocker en toute sécurité une clé secrète?
- 16. Comment enregistrer en toute sécurité et envoyer le nom d'utilisateur/mot de passe de connexion?
- 17. comment stocker en toute sécurité le mot de passe crypté dans Android en utilisant AES et décrypter plus tard?
- 18. Envoyer un mot de passe en toute sécurité en utilisant gwt et le moteur de l'application?
- 19. Comment stocker en toute sécurité des informations d'identification de base de données pour une application Windows?
- 20. Comment stocker le mot de passe comme hash, puis authentifier l'utilisateur sans même connaître le mot de passe en clair?
- 21. Comment: transmettre un nom d'utilisateur et un mot de passe en toute sécurité dans un Webview
- 22. Vérification du mot de passe; Est-ce une façon de le faire en toute sécurité?
- 23. Comment stocker en toute sécurité le fichier de configuration de mon site Web?
- 24. Comment stocker les identifiants/clés d'application en toute sécurité?
- 25. printemps sécurité intercepter mauvais mot de passe
- 26. mot de passe ne haché avant de les stocker dans la base de données
- 27. Comment cacher en toute sécurité des informations d'identification de base de données dans une application C#?
- 28. Transférer en toute sécurité le mot de passe de C# vers Java Application
- 29. Comment stocker en toute sécurité un secret ou une clé privée dans Silverlight 4?
- 30. Comment stocker en toute sécurité des données dans iOS avec React Native?
Pour bonne lecture, voir [Voir Unifier l'accès au magasin de clés dans ICS] (http://android-developers.blogspot.com/2012/03/unifying-key-store-access-in-ics.html) et [Utilisation de l'ICS API KeyChain] (http://nelenkov.blogspot.com/2011/11/using-ics-keychain-api.html). – jww