首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android中保护我的加密密钥?

如何在Android中保护我的加密密钥?
EN

Stack Overflow用户
提问于 2018-03-07 06:33:45
回答 2查看 2.3K关注 0票数 8

我在我的安卓应用程序中实现了SQLCipher,以保证数据库的安全。SQLCipher需要一个密钥来加密数据库文件。我面临的问题是密钥保护,如果我的应用程序被使用在一个根设备上,或者是反向工程,那么我的密钥将被公开,数据库可以被解密。

请注意,我的应用程序并不是每次用户打开密码时都要求输入密码,因此用户输入的密码不能用作密钥。我想实现像facebook这样的行为,whatsapp应用程序使用私钥/密钥对数据进行加密,而不需要任何密码,并且让用户随时登录。这些应用程序在哪里以及如何存储它们的密钥?

请提出一个保护key.Also的解决方案/算法,Android是否为数据保护/管理提供了这样的功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-07 06:41:07

您可以使用Andriod加密您的SQLCipher密码。

刚才我也遇到了同样的问题,SQLCipher被用来保护数据,但是密码本身并不安全。这允许存在一个安全漏洞,简单的反编译将以字符串常量的形式显示密码。

我的解决办法是:

  • 在一开始应用程序启动时生成一个随机数。(只要适合你,你就可以改变这种行为)
  • 使用Android Keystore加密此数字。
  • 数字的原始形式一旦加密就消失了。
  • 把这个保存在Prefs里。
  • 现在,每当SQLCipher需要密码时,它就会解密并使用它。
  • 由于Android在运行时提供密钥,而且密钥严格地特定于应用程序,因此很难破坏这个数据库。
  • 尽管一切都可能被破坏,但这种方法将使攻击者从DB或DB密码检索数据变得更加困难。

下面是我创建的一个示例项目,它的SQLCipher用例与您的相同。

用于加密密码的加密助手

SQLCipher用例

请注意,在上面的讨论中,您使用的作为加密密钥的术语用作DB的密码/编号。

票数 9
EN

Stack Overflow用户

发布于 2018-04-23 17:39:47

就我个人而言,我使用子字符串从字符串值中选择序列或唯一字符,然后将其连接起来以获得我的键,这是相当野蛮的,但我没有找到其他有效的解决方案。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49145592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档