登录系统中的加密和解密

时间:2016-08-09 14:45:33

标签: android encryption

我有一个登录系统,但是我想在注册这个系统时加密密码并将加密密码写入数据库,然后当这个用户再次登录时,程序从数据库接收加密传递解密匹配输入的登录密码并成功登录。< / 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...

此密码与登录密码不匹配。为什么?也许是关于加密变量?

1 个答案:

答案 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();

希望这有帮助!