如何在android中安全地存储AES密钥和iv?

如何在android中安全地存储AES密钥和iv?,android,security,encryption,Android,Security,Encryption,我有一个android应用程序,它使用HTTP get/post请求从php页面接收数据。我在服务器端加密数据,在安卓系统中解密。我使用AES 128位加密,我在android端硬编码了字符串密钥和iv。如果有人逆向工程我的apk,他们可以很容易地得到钥匙和iv。是否有任何方法可以将这两个字符串安全地存储在apk中。 请提供帮助您可以使用Android 4.3(API级别18)中引入的Android密钥库密钥库提供程序功能 Android密钥库系统允许您将私钥存储在容器中,从而使从设备中提取私钥

我有一个android应用程序,它使用HTTP get/post请求从php页面接收数据。我在服务器端加密数据,在安卓系统中解密。我使用AES 128位加密,我在android端硬编码了字符串密钥和iv。如果有人逆向工程我的apk,他们可以很容易地得到钥匙和iv。是否有任何方法可以将这两个字符串安全地存储在apk中。
请提供帮助

您可以使用Android 4.3(API级别18)中引入的Android密钥库密钥库提供程序功能

Android密钥库系统允许您将私钥存储在容器中,从而使从设备中提取私钥变得更加困难。一旦密钥位于密钥库中,它们就可以用于加密操作,而私钥材料仍然不可导出。

您可以使用Android 4.3(API级别18)中引入的Android密钥库密钥库提供程序功能

Android密钥库系统允许您将私钥存储在容器中,从而使从设备中提取私钥变得更加困难。一旦密钥位于密钥库中,它们就可以用于加密操作,而私钥材料仍然不可导出。
不,这类似于解决DRM问题

当然,您可以将密钥隐藏在显眼的位置,例如使用,但如果不控制密钥存储的设备,则无法保护密钥

当然,您可以实现自己的传输模式安全性:这样您就不必在APK中拥有密钥(只需一个受信任的公钥或证书)


然而,快速、简单且最安全的方法是使用TLS。特别是在使用前向保密(EDH或ECDHE密码套件)时,您的数据应该是安全的。

不,这类似于解决DRM问题

当然,您可以将密钥隐藏在显眼的位置,例如使用,但如果不控制密钥存储的设备,则无法保护密钥

当然,您可以实现自己的传输模式安全性:这样您就不必在APK中拥有密钥(只需一个受信任的公钥或证书)


然而,快速、简单且最安全的方法是使用TLS。尤其是在使用前向保密(EDH或ECDHE密码套件)时,您的数据应该是安全的。

绝不应硬编码IV。每个新加密的IVs都需要不同,否则会丢失安全属性。IVs也不需要保密,所以实际上你唯一需要的是一个安全的地方来放置钥匙。与Maarten和Alireza达成一致,你正试图解决一个难题。你可以使用诸如DexGuard或Arxan之类的工具,而不是试图发明自己的解决方案,但它们不是免费的。IV不应该硬编码。每个新加密的IVs都需要不同,否则会丢失安全属性。IVs也不需要保密,所以实际上你唯一需要的是一个安全的地方来放置钥匙。与Maarten和Alireza达成一致,你正试图解决一个难题。您可以使用诸如DexGuard或Arxan之类的工具,而不是试图发明自己的解决方案,但它们不是免费的。