Java 密码加密

Java 密码加密,java,hash,passwords,compare,sha512,Java,Hash,Passwords,Compare,Sha512,我用这个密码加密密码 public static byte[] encrypt(String password) { try { BASE64Encoder be = new BASE64Encoder(); MessageDigest md = MessageDigest.getInstance("sha-512"); md.update(password.getBytes());

我用这个密码加密密码

 public static byte[] encrypt(String password) {
        try {
            BASE64Encoder be = new BASE64Encoder();
            MessageDigest md = MessageDigest.getInstance("sha-512");
            md.update(password.getBytes());
            return md.digest();
        } catch (NoSuchAlgorithmException e) {
        }
        return null;
    }
如果我用这段代码来比较密码的话,效果会很好

 if (encrypt(passwordField.getText()).compareTo(encrypt("password")) == 0 )
  system.out.print("true")
else *false
我想隐藏我的密码,所以我使用
System.out.println(encrypt(“password”)
的控制台结果进行比较,所以我的代码如下所示

    if (encrypt(passwordField.getText()).compareTo("5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5+buE8EA54Wdua6hXPliNoQUlEOOqCjKp5Vh5riKwwtYh/n"+
"NvwKPoX4uw==") == 0 )
          system.out.print("true")
        else *false
它将始终输出false。我不明白为什么。
感谢您抽出时间

您应该阅读有关哈希的内容

在散列中,如果您尝试编码一个字符串,请每次都说“hello”,您将获得不同的输出,尽管您编码的是同一个字符串

试试下面的

   for(i=1;i<10;i++)
   System.out.println(encrypt("password"));

for(i=1;i所有SHA-512中的第一个是不可逆的散列函数。另一方面,加密是可逆的。您是如何创建“5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5+BUE8EA54WDUA6HXplinOqculeOqcjkp5VH5RikwtYH/nNvwKPoX4uw=”?它没有有效的Base64长度,因此长于SHA-512输出。您不应该使用简单的哈希函数来保护用户的密码。您需要使用强哈希方案,如PBKDF2、bcrypt、scrypt和Argon2。请确保使用高成本系数/迭代计数。通常选择成本,以便单个迭代开启至少需要100毫秒。请参阅更多信息:“5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5+BUE8EA54WDUA6HxPLINOQUELOOQCJKP5VH5RIKWWTYH/nN‌​vwKPoX4uw==“我只是用这个行System.out.println(加密(“密码”)创建的。顺便说一句,这只是一个适合我的小程序。我试图了解它仍然有一个不正确的长度。作为提示,Base64编码时它必须是88个字符。另外,请注意。您在上一条注释中给出的代码大写字母“P”而问题中的代码有一个小写字母“p”。