And*_*Dev 4 encryption android
我想在我的Android应用中加密数据.我对加密的当前状态没有什么经验,无论是针对Android还是一般情况.我记得几年前美国有法律禁止软件公司出口强大的加密技术.考虑到Android是开源代码,我不确定今天是否适用.
我想要完成的是允许用户仅使用密码加密数据.我更喜欢避免使用私钥/公钥,因为这可能需要用户输入这两个密钥.在我的应用程序中,用户应该能够使用密码加密/解密数据.他们的数据将从一个移动设备发送到另一个移动设备,如果不知道密码,就不可能在接收端解密他们的数据.我在发送数据时使用SSL,但这还不够好,因为数据需要在服务器中继到接收设备之前保持加密状态.如果黑客可以访问我的服务器,他们可能会读取数据.出于这个原因,我想在发送设备上对其进行加密,并仅在接收设备上对其进行解密.
我需要解决的一些问题:
我不是在寻找任何"非常难以破解"的算法,但这应该是足够的.存储的数据类型是图像,视频,音频和GPS数据.如果解决方案适用于Android 2.2及更高版本,那就太好了.我不明白为什么任何算法都不适用于这些版本,因为算法应该独立于操作系统.不过,也许Android确实只对某些版本使用内置算法?
编辑:
我现在用于我的应用程序中的一些基本内部加密的代码看起来像这样,但我怀疑它足够了:
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
Run Code Online (Sandbox Code Playgroud)
最初,上述行是:
SecureRandom.getInstance("SHA1PRNG")
Run Code Online (Sandbox Code Playgroud)
但谷歌在4.0中改变了这一点,这导致我的代码破裂.使用我之前的代码加密的任何内容都无法再使用4.0的默认API进行解密.我个人发现Google存在一个主要问题,因为它们破坏了兼容性.是什么阻止他们将来再次重复这个?我的加密/解密不能依赖于谷歌选择破解兼容性.
我也被迫使用128位加密,因为显然支持192和256位不一定适用于所有设备,可能是因为当地政府法律.
是否有加密API让我只使用密码加密,但如果没有,那么我会考虑使用私钥/公钥.
我编写了一个开源Java库,使用256位AES通过密码加密数据.你可以在GitHub上找到它:JNCryptor.这与iOS 的RNCryptor项目兼容.
这可能适用于Android,或者至少可以看到代码如何工作并根据需要进行调整.(如果你发现它没有按照你的意愿工作,请随意提出问题,我会调整库).
我可以使用的当前加密算法是什么,它们是否可在国际上使用,或美国是否对使用它们有一些限制?
有许多算法可供选择,但如果您坚持使用非常标准的东西,例如AES,那么你会很好.
据我所知,美国仍然禁止出口使用256位AES密钥大小的软件.其他国家也可能存在其他限制.但我不是律师.
我是否会更好地创建自己的自定义加密算法并不时修改它以防止黑客轻易破坏它?或者你会劝阻这个吗?
不要这样做.始终使用已经过广泛同行评审的众所周知的算法.应该不需要定期更改您的算法选择,除非已知它被泄露.