Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:加密密码_Android_Password Protection - Fatal编程技术网

Android 安卓:加密密码

Android 安卓:加密密码,android,password-protection,Android,Password Protection,可能重复: 我正在使用共享首选项存储密码。按原样保存密码数据是否安全,或者我必须在保存之前对其进行加密。请帮我提供示例代码 提前感谢,您不应该直接保存密码,而应该保存密码的散列 不,用纯文本存储密码是不安全的,还记得索尼最近发生了什么吗 任何都可以简短回答:它非常安全 详细回答:首先,如果您正在创建一个允许用户登录到web/远程服务的应用程序,那么您可能需要查看。学习API并与之集成有点困难,但您会得到一些好处: 简单的多帐户管理(所有帐户都存储在AccountManager中) 添加Sync

可能重复:

我正在使用共享首选项存储密码。按原样保存密码数据是否安全,或者我必须在保存之前对其进行加密。请帮我提供示例代码


提前感谢,

您不应该直接保存密码,而应该保存密码的散列

不,用纯文本存储密码是不安全的,还记得索尼最近发生了什么吗


任何都可以

简短回答:它非常安全

详细回答:首先,如果您正在创建一个允许用户登录到web/远程服务的应用程序,那么您可能需要查看。学习API并与之集成有点困难,但您会得到一些好处:

  • 简单的多帐户管理(所有帐户都存储在
    AccountManager
    中)
  • 添加
    SyncAdapter
    s的功能(编写它们将非常简单,因为
    AccountManager
    将使用正确的帐户调用适配器--您不必手动为每个帐户运行同步)
  • 您的应用程序将显示在
    设置>帐户和同步
  • 查看文档中的--它显示了如何使用
    AccountManager
    (如果不需要,可以忽略同步内容)

    现在,谈谈存储密码的安全性(以下内容对于在
    SharedReferences
    AccountManager
    中存储密码都有效)。只要运行应用程序的设备不是根设备,它就完全安全。除了你的应用程序之外,没有其他应用程序可以读取密码。如果您使用USB电缆将手机连接到PC,并使用
    adb pull
    尝试获取相应的文件,则您甚至无法读取密码

    但是,如果手机是根用户,任何获得根用户访问权限的应用程序都可以读取密码。另外,
    adb pull
    也可以工作,您可以在几秒钟内获得密码


    因此,建议进行加密(特别是当您的web/cloud/remote服务包含敏感数据时)。我在上一个项目中使用过(与
    AccountManager
    一起使用),它运行得非常好。如果你想知道,我只是用了一个常量作为“主密码”。为了增加安全性,我对最终版本()进行了模糊处理。

    在发布基本问题之前使用搜索。我不认为这个问题不好。iOS有钥匙链,我想Android也有类似的东西,这可能就是这里应该使用的。@Thilo,Android没有这样的密码或钥匙存储。密码可以存储在应用程序的共享首选项中,通常在普通设备上无法访问这些密码。但是,如果设备是根设备(这在Android中并不少见)或开发人员设备,那么共享首选项也可以访问。问题不好,已经解决了。真的,使用搜索。它的存在是有原因的。如果您需要将密码发送到服务器进行身份验证,那么这将没有帮助。例如,Thunderbird或Firefox需要存储密码,而不仅仅是散列。Unnikrishnan PV从未说过必须将密码发送到服务器。所以你不能假设没有指定的东西。如果Android提供了一个用于密码存储的SDK(不确定它是否提供),我会使用它,而不是使用我自己的。遗憾的是,它没有,这是一个功能要求。Android支持javax.crypto包。请注意,如果“主密码”包含在应用程序的某个地方,加密也不会帮助对付根设备上的专用黑客。@Thilo是的,但模糊处理肯定有帮助。而且,您也不能真正要求用户输入其密码:)的密码。从Web服务获取它是没有用的,因为“专门的黑客”会发现这一点。完全同意。我只是想强调,这里重要的一点是,在共享首选项中存储明文,正如您所说,已经相当安全了,您需要尽最大努力在这方面做出任何重大改进。如果你真的很担心,你需要做一些类似OAuth的事情。