在android上存储加密/解密密钥的安全位置

时间:2015-04-20 11:24:45

标签: android encryption

在我的场景中,应用程序用户不应该能够操纵一组字符串,因为它们是不完整的游戏分数,在完成游戏时会进入排行榜。如果他们修改它们是不必要的优势。 我测试了字符串加密并使用此处显示的代码存储在文件中 https://github.com/tozny/java-aes-crypto/blob/master/AesCbcWithIntegrityTests.java

它说

  

注意:如果您要生成随机密钥,您可能会将其存储在某处

什么是存储此密钥的最佳位置,或者是否有更好的方法来实现我的目标。

 try {
        SecretKeys key;

        key = generateKey();
       //Note: If you are generating a random key, you'll probably be storing it somewhere


        // The encryption / storage & display:

        String keyStr = keyString(key);
        key = null; //Pretend to throw that away so we can demonstrate converting it from str
        String path = getPath();
        String textToEncrypt = savePuzzle(path + "/intput.txt");
        Log.i("Tozny", "Before encryption: " + textToEncrypt);

        // Read from storage & decrypt
        key = keys(keyStr); // alternately, regenerate the key from password/salt.
        CipherTextIvMac civ = encrypt(textToEncrypt, key);
        String temp = civ.toString();
        Log.i("Tozny", "Encrypted: " + temp);


        CipherTextIvMac civ2 = new CipherTextIvMac(temp);
        String decryptedText = decryptString(civ2, key);

2 个答案:

答案 0 :(得分:1)

使用AndroidKeyStore添加keystoreEntry。

此链接可以帮助您: http://developer.android.com/training/articles/keystore.html

答案 1 :(得分:0)

有很多方法。

- 提供资源(可以很容易地反编译)

  • stoing as constant(cam be decompiled)
  • 我更喜欢什么 创建名为MyKeyGenerator的类。 做一些逻辑,如追加,反向或等操作,最后得到一些关键。 使用代码Obfuskation使用progauard。

这对你有用。