我有一个登录系统,但是我想在注册这个系统时加密密码并将加密密码写入数据库,然后当这个用户再次登录时,程序从数据库接收加密传递解密匹配输入的登录密码并成功登录。< / p>
我的加密密码成功写入数据库。 但是当我从数据库收到不匹配的解密pass =登录时输入密码。
我的代码:
SignUpactivity.java(范围加密)
String unsafetypass=args[1];
Encryption encryption = Encryption.getDefault("Key", "Value", new byte[16]);
String pass2 = encryption.encryptOrNull(unsafetypass);
这里pass2是加密密码在数据库中编写没问题。
但是在这里我必须从数据库加密密码中选择它确定我选择了。但现在我必须解密匹配登录密码。
问题在这里: LoginActivity.java(范围解密)
Encryption encryption = Encryption.getDefault("Key", "Value", new byte[16]);
Password =encryption.decryptOrNull(rs2.getString("Password")); //rs2 is resultset string from database...
此密码与登录密码不匹配。为什么?也许是关于加密变量?
答案 0 :(得分:1)
您正在使用的加密课程是什么?我似乎无法在任何地方找到它......
使用SHA-256哈希作为&#34;加密&#34;可能更容易,甚至更安全。只需对密码进行哈希处理,将其存储在服务器中,当用户再次尝试登录时,将服务器存储的哈希值与他尝试使用的密码的哈希值进行比较。这样,密码永远不会通过网络发送,而且几乎不可能反向散列SHA-256!密码存储示例:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
Server.write(new String(hash, StandardCharsets.UTF_8);
用于密码比较:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
passwordHash = Server.readLine();
if((new String(hash, StandardCharsets.UTF_8)).equals(passwordHash)) authentication.success();
希望这有帮助!