Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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
Java 加密用户密码android studio_Java_Android_Android Studio_Encryption - Fatal编程技术网

Java 加密用户密码android studio

Java 加密用户密码android studio,java,android,android-studio,encryption,Java,Android,Android Studio,Encryption,我正在开发一个android应用程序,我使用RESTAPI在注册时发送用户名和密码 现在,数据和密码作为计划文本保存在数据库中 在将数据发送到数据库之前,我应该如何使用或加密数据 最好的方法是什么 我正在使用java和phpmyadmin 注: 我需要能够解密密码文本,因为如果用户希望从不同的设备登录,那么您使用MySQL作为数据库,只需让数据库在SQL语句中使用您想要的函数对其进行散列即可 您希望使用单向散列而不是双向加密。使用单向散列(存储密码的正常方式),您可以从任何设备登录,并重置密码(

我正在开发一个android应用程序,我使用RESTAPI在注册时发送用户名和密码

现在,数据和密码作为计划文本保存在数据库中

在将数据发送到数据库之前,我应该如何使用或加密数据

最好的方法是什么

我正在使用java和phpmyadmin

注:


我需要能够解密密码文本,因为如果用户希望从不同的设备登录,那么您使用MySQL作为数据库,只需让数据库在SQL语句中使用您想要的函数对其进行散列即可

您希望使用单向散列而不是双向加密。使用单向散列(存储密码的正常方式),您可以从任何设备登录,并重置密码(无法恢复明文原件)

示例1-单向:

注册SQL:

INSERT INTO user_sha2 VALUES ('member1',SHA2('secretpassword',512) );
INSERT INTO user_aes VALUES ('member1',AES_ENCRYPT('secretpassword','my_secret_key_to_encrypt') );
登录SQL:

SELECT * FROM user_sha2 WHERE user_name='member1' AND password=SHA2('secretpassword',512);
SELECT * FROM user_aes WHERE user_name='member1' AND password=AES_ENCRYPT('secretpassword','my_secret_key_to_encrypt');
如果用户需要恢复密码,您通常只需让他们重置密码,方法是给他们一个重置令牌,并让他们在令牌匹配时选择一个新密码

如果您希望他们以纯文本形式获取密码(请不要这样做!),那么您需要像AES一样的双向加密。见下文:

注册SQL:

INSERT INTO user_sha2 VALUES ('member1',SHA2('secretpassword',512) );
INSERT INTO user_aes VALUES ('member1',AES_ENCRYPT('secretpassword','my_secret_key_to_encrypt') );
登录SQL:

SELECT * FROM user_sha2 WHERE user_name='member1' AND password=SHA2('secretpassword',512);
SELECT * FROM user_aes WHERE user_name='member1' AND password=AES_ENCRYPT('secretpassword','my_secret_key_to_encrypt');
恢复SQL:

SELECT AES_DECRYPT(password, 'my_secret_key_to_encrypt') AS unencrypted FROM user_aes ;
资料来源:
查看此链接了解更多信息:

Jan的anwer解释了基本原理,我想补充的是,您应该始终对密码使用单向散列,以便在发生数据泄露时无法恢复密码,并且您应该始终将安全逻辑放在服务器上,否则散列本质上就是密码本身,如果是客户端计算的,我不知道你的注释是怎么写的;如果您的用户希望从其他设备登录,只需使用第一个设备的相同过程再次对其进行身份验证(使用salt值对他们输入的密码进行散列,并将其与数据库中存储的密码进行比较)。你不应该为了认证第二台设备而解密它。你永远不应该加密密码,只应该散列它们。永远不要将消息摘要(如SHA1)用作密码哈希。使用Argon2、bcrypt、scrypt或PBKDF2。