Java 双重加密

Java 双重加密,java,security,encryption,Java,Security,Encryption,我正在使用android应用程序加密数据 我想到了双重加密 String key = "key"; String salt = "someSalt"; byte[] iv = new byte[16]; Encryption encryption = Encryption.getDefault(key, salt, iv); String encrypted = encryption.encryptOrNull("Some String"); Log.d("Encrypto", "Encry

我正在使用android应用程序加密数据

我想到了双重加密

String key = "key";
String salt = "someSalt";
byte[] iv = new byte[16];
Encryption encryption = Encryption.getDefault(key, salt, iv);

String encrypted = encryption.encryptOrNull("Some String");

Log.d("Encrypto", "Encryption Level 1 : "+encrypted);

encrypted = encryption.encryptOrNull(encrypted);

Log.d("Encrypto", "Encryption Level 2 : "+encrypted);

String decrypted = encryption.decryptOrNull(encrypted);

Log.d("Encrypto", "Decryption Level 2 : "+decrypted);

decrypted = encryption.decryptOrNull(decrypted);

Log.d("Encrypto", "Decryption Level 1 : "+decrypted);
这非常有效,但建议使用吗

  • 是的,这会增加存储加密字符串的内存使用量,但是如果这样可以使它更安全,那么使用更多的内存就可以了
  • 如果我这样做,我会面临一些问题吗

  • 主要问题:这是一个好的加密库吗?如果没有,请给我推荐一个更好的

    您真的需要加密数据吗

    为什么要双重加密?有更好的方法——例如,更长的密钥——来增加对离线暴力攻击密文的抵抗力

    “通过模糊实现安全”是一个禁忌。回到您需要的基本知识(密钥长度、块大小、加密模式、何时使用对称或非对称密钥)等

    当你正在编写一个Android应用程序时,我想问一下

    • 该库是用Java编写的,它使Java 系统调用。这将很容易反转/挂接系统调用。当你可以通过挂接Android系统调用来转储密钥时,添加更长的密钥是否有助于强化你的应用程序
    • 您的Android Java代码被反编译为“几乎”源代码或返回 到Smali代码-然后修改-然后重新编译
    • 您打算如何分发密钥?运行时还是静态烘焙到代码中?对于所有应用程序用户,是随机键还是相同的键
    • 你能利用Android硬件来保存和保护你的密钥,而不仅仅是把密钥放在软件中吗
    如果是我的应用程序&&I关心保密性,我会使用硬件支持的加密(接受一些较旧的Android设备可能不支持它)或使用本机(C)加密库。后者为您提供了广泛的设备支持,但也带来了其他问题(JNI边界、代码提升)

    总之,引入加密听起来很简单。但是,当它只是强调一些有趣的东西正在被保护时,你真的需要它吗

    PS-您可能希望将此问题重新发布到:

    这非常有效,但是否推荐

    简短回答:没有


    答:使用流密码,使用与您展示的相同参数(密钥、IV、nonce、计数器等)的双重加密将生成明文,允许每个人读取您的数据。

    使用固定IV是不安全的。加密任意次数,如果你使用的是固定的IV,那么它对你没有帮助。你也在用相同的密钥加密。如果有人得到了密钥,你可以加密1000次,这无关紧要。因为我们不知道的加密算法最好不要使用Simbios,snake oil。使用AES(高级加密标准)等标准。使用安全的加密方法,安全性在于不容易找到的好密钥,而使用128位随机密钥的AES是安全的。