我需要使用 java gwt 从客户端加密密码,但导入 java.security 不可用

0 java encryption gwt java.security

当我尝试在 java gwt 中编译时,它显示以下问题

  1. 导入 java.security 无法解析
  2. MessageDigest 无法解析为类型
  3. NoSuchAlgorithmException 无法解析为类型

注意:使用 gwt 2.0 java 6 (jre 1.6) 的版本也在 1.8 中尝试过

public static String EncryptPassowrd(String password)
    {
        String encryptedPassword = "";
        byte[] actualBytes = password.toString().getBytes();
        byte[] newbytes = new byte[actualBytes.length * 2];
        for (int i = 0; i < actualBytes.length; i++)
        {
            newbytes[2 * i] = actualBytes[i];
            newbytes[2 * i + 1] = 0;
        }
        try
        {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.reset();
            md.update(newbytes);
            byte[] encryptedbytes = md.digest();
            for (int i = 0; i < encryptedbytes.length; i++)
            {
                encryptedPassword = encryptedPassword == "" ? Integer.toString((encryptedbytes[i] & 0xff) + 0x100, 16).substring(1) : encryptedPassword + "-"
                    + Integer.toString((encryptedbytes[i] & 0xff) + 0x100, 16).substring(1);
            }
            return encryptedPassword.toUpperCase();
        }
        catch (NoSuchAlgorithmException e)
        {
            // Do Nothing
        }
        return "";
    }
Run Code Online (Sandbox Code Playgroud)

Dar*_*lls 5

java.security 不包含在 GWT 模拟的 Java 运行时库的子集中,正如已经提到的。

尽管您可以使用 GWT-Crypto 绕过它,但密码加密并不安全,尤其是在客户端 - 检查GWT-Crypto 自己的 wiki。相反,纯文本密码应通过加密通道 (SSL) 发送并在服务器上安全处理(例如,使用 bcrypt 散列)。由于散列函数是单向函数,因此您将无法“解密”散列。为了验证您的用户,您可以再次通过散列函数运行密码,以便与存储在数据库中的散列进行比较。