双重加密

时间:2018-07-21 04:33:38

标签: java security encryption

我正在使用https://github.com/simbiose/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", "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);

这很好用,但是推荐吗?

  1. 是的,这增加了存储加密字符串的内存使用量,但是如果它使它更安全,那么使用更多的内存就可以了。
  2. 如果这样做,我会遇到一些问题吗?

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

2 个答案:

答案 0 :(得分:4)

您真的需要加密数据吗?

https://www.schneier.com/blog/archives/2015/06/why_we_encrypt.html

为什么要双重加密?有更好的方法(例如,更长的密钥)来增加抵抗力,使人们对密文进行离线暴力破解。

通过默默无闻的安全性”是禁止的。回到您需要的基础知识(密钥长度,块大小,加密模式,何时使用对称或非对称密钥)等。

在编写Android应用程序时,我会问..

  • 该库是用Java编写的,并且使Java 系统调用。反向/挂接系统调用很简单。当您可以通过挂接Android系统调用来转储密钥时,添加更长的密钥是否有助于增强应用程序的性能?
  • 您的Android Java代码已反编译为“几乎”源代码,或者反编译为 到Smali代码-然后进行修改-然后重新编译?
  • 您打算如何分发密钥?运行时还是静态烘焙到代码中?对于所有应用程序用户,它是随机密钥还是相同密钥?
  • 您能否利用Android硬件来保留和保护您的密钥,而不仅仅是将密钥包含在软件中? https://source.android.com/security/keystore/

如果这是我的应用,并且&&我关心机密,我会使用硬件支持的加密(接受某些较旧的Android设备可能不支持的加密)或使用本机(C)加密库。后者为您提供了广泛的设备支持,但引入了其他问题(JNI边界,代码提升)。

总而言之,引入加密听起来很简单。但是,当它只是强调有趣的东西正在受到保护时,您真的需要它吗?

PS-您可能希望在以下问题上重新发布此问题:https://security.stackexchange.com/

答案 1 :(得分:1)

  

这很好用,但是推荐吗?

简短答案:否

答案:使用流密码,使用与您展示的相同的参数(密钥,IV,随机数,计数器等)进行双重加密将产生明文,允许所有人读取数据。