gpt4 book ai didi

java - jBCrypt 加密和解密

转载 作者:行者123 更新时间:2023-12-02 10:52:42 40 4
gpt4 key购买 nike

我开始了解 jBCrypt 用于散列密码并存储在数据库中。但我没有找到任何选项可以从哈希值中获取实际值。只有 BCrypt.checkpw(password, hashedPassword) 可用,它返回 boolean 值。 http://www.mindrot.org/projects/jBCrypt/如何从哈希值中获取实际值。如果在jBCrypt中不可能,是否有其他方法可以在java中加密和解密值?提前致谢...

最佳答案

您可以使用对称加密算法,而不是使用哈希函数,例如 Spring Security 提供的,来自他们的 Crypto Module,更具体地说是他们的 Encryptors类。

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

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。根据他们的文档:

Creates a text encryptor that uses "stronger" password-based encryption.

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

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

为了使此功能做好生产准备,您希望将提供给 Encryptors.delux() 的密码存储在安全的地方。此外,您还希望使用不同的方式为您的密码生成盐(可能为每个新密码加密生成一个盐)并将其存储起来以供以后解密密码时使用。

此外,您可能不希望将密码保留为纯文本(字符串),而是将其保留为 char[]byte[],但这应该给出从你可以开始的地方开始。

还有一个不同的库具有相同的功能,来自 Apache,Apache Commons Crypto ,它使用与 Spring Crypto 相同的算法。

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

旁注:您可能会遇到您的 jdk 仅限于 128 位的情况。要受益于 256 位,请确保添加 Java Cryptography Extension

关于java - jBCrypt 加密和解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52036137/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com