如何在客户端加密密码并在服务器端解密?

时间:2016-03-14 06:45:19

标签: java encryption

我想在创建用户后加密我的密码并将其保存在数据库中。我将密码写入“密码字段”,然后按“保存按钮”。然后我使用this library

用于加密

        BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor();
        String encryptedPasword = passwordEncryptor.encryptPassword(myPasword);
        user = new User();
        user.setUsername(username);
        user.setUserRole(role);
        user.setFistname(firstname);
        user.setLastname(lastname);
        user.setGroupId(group);
        user.setBssLogin(login);
        user.setBssPassword(encryptedPasword);
        dao.addCrmUser(user);

之后,我的数据库中有一个新的加密密码。

在服务器端,我找到了用户并尝试解密密码

String login = user.getLogin();
String password = user.getPassword();
String dencryptPassword = encryptor.**NOT_METHOD_FOR_IT**(password);

我需要原始密码,该密码设置在另一个系统中。 如何使用我当前的库?

我在Github中使用this和另一个库使用了一些key,但我不知道什么是更好和/或更快。

2 个答案:

答案 0 :(得分:0)

您不会从数据库中解密密码以进行验证。

加密在尝试登录时从用户收到的密码,并将该加密值与数据库中的值进行比较。为了安全起见,良好的密码加密实际上是一个哈希函数,这是不可逆的。

答案 1 :(得分:0)

jasypt 中的BasicPasswordEncryptor()尽管名称不对,但不加密密码,但使用单向哈希对密码进行哈希处理(很明显,方法是' t需要加密密钥)。

此过程后您无法获取密码,并使用checkPassword(String plainPassword, String encryptedPassword)方法验证密码。

如果您确实需要能够解密密码,则需要使用其他方法在加密时执行真实加密。这提出了处理加密密钥的需要,加密密钥可能引入的问题与排序(存储它们的位置等)一样多。