Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jBCrypt加密和解密_Java_Spring Mvc_Spring Boot_Java 8_Jbcrypt - Fatal编程技术网

Java jBCrypt加密和解密

Java jBCrypt加密和解密,java,spring-mvc,spring-boot,java-8,jbcrypt,Java,Spring Mvc,Spring Boot,Java 8,Jbcrypt,我开始了解jBCrypt,它可以散列密码并存储在数据库中。但是我没有找到从散列值返回实际值的任何选项。只有BCrypt.checkpw(密码,hashedPassword)可用,返回布尔值。 如何从散列值中获取实际值。 如果在jBCrypt中不可能,那么在java中还有其他加密和解密值的方法吗?提前感谢…哈希函数的定义对前映像有抵抗力:给定h(x),应该不可能恢复x。“可逆”的哈希函数与该属性正好相反。因此,您无法反转散列函数,因此无法从散列值中获取实际值。您无法从h(x)中获取x,您唯一能做的

我开始了解jBCrypt,它可以散列密码并存储在数据库中。但是我没有找到从散列值返回实际值的任何选项。只有
BCrypt.checkpw(密码,hashedPassword)
可用,返回布尔值。 如何从散列值中获取实际值。
如果在jBCrypt中不可能,那么在java中还有其他加密和解密值的方法吗?提前感谢…

哈希函数的定义对前映像有抵抗力:给定h(x),应该不可能恢复x。“可逆”的哈希函数与该属性正好相反。因此,您无法反转散列函数,因此无法从散列值中获取实际值。您无法从h(x)中获取x,您唯一能做的就是为即将到来的新密码y计算h(y),并查看它是否等于h(x)


不仅仅是jBcrypt,任何安全的哈希函数都不会提供恢复功能,而不是使用哈希函数,您可以使用对称加密算法,如
Spring Security
提供的对称加密算法,从他们的
加密模块
,更具体地说是他们的类

下面是一个基本的加密/解密示例:

public static void main(String[] args) {
        final String salt = UUID.randomUUID().toString().replace("-", "");
        TextEncryptor textEncryptor = Encryptors.delux("my-super-secure-password-for-the-encryptor", salt);
        final String passwordToBeEncrypted = "my-secure-password-to-be-encrypted";
        final String encrypted = textEncryptor.encrypt(passwordToBeEncrypted);
        textEncryptor.decrypt(encrypted);
        System.out.println(passwordToBeEncrypted.equalsIgnoreCase(textEncryptor.decrypt(encrypted)));
}
在这里,我使用的是
delux
。根据他们的文件:

创建一个使用“更强”基于密码的文本加密程序 加密

请记住,这是一种非常幼稚的加密和解密方法

我不建议您将此解决方案复制粘贴到生产代码中。

为了使此功能能够投入生产,您需要将提供给
Encryptors.delux()
的密码存储在安全的地方。 此外,您还希望使用不同的方式为您的密码生成salt(可能为每个新密码加密生成salt),并将其存储在以后要解密密码的位置

此外,您可能不希望将密码保留为纯文本(字符串),而是将其保留为
char[]
byte[]
,但这应该为您提供一个起点

还有一个与Apache不同的库,它使用与Spring Crypto相同的算法

请记住,使用库比实现自己更安全,因为使用package
javax.crypto
将要求您知道自己在做什么,并且不会造成比需要更多的伤害

旁注:您可能会遇到jdk限制为128位的情况。要从256比特中获益,请确保添加

但是我没有找到从散列值返回实际值的任何选项

这就是加密哈希函数的主要用途

在java中还有其他加密和解密值的方法吗?先谢谢你

Java中有很多加密/解密值的示例,只需搜索它,即使在这里也是如此。您还可以研究一下——它是关于基本的低级加密API的

我希望你不是想对用户密码使用加密——即使是远程可能使密码可逆,也会使你的系统存在潜在的泄漏危险