首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jBCrypt加密和解密

jBCrypt加密和解密
EN

Stack Overflow用户
提问于 2018-08-27 17:18:44
回答 3查看 2.6K关注 0票数 0

我开始了解jBCrypt用于散列密码并将其存储在数据库中。但是我没有找到任何从散列值中取回实际值的选项。只有返回布尔值的BCrypt.checkpw(password, hashedPassword)可用。http://www.mindrot.org/projects/jBCrypt/如何从散列值中获取实际值。如果这在jBCrypt中是不可能的,有没有其他方法来加密和解密java中的值呢?先谢谢你...

EN

回答 3

Stack Overflow用户

发布于 2018-08-27 17:41:36

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

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

代码语言:javascript
复制
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()的密码存储在安全的地方。此外,您还希望使用一种不同的方式为您的密码生成一个盐(可能是每个新密码加密的一个盐),并将其存储以供以后解密密码时使用。

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

还有一个不同的库可以做同样的事情,来自Apache的Apache Commons Crypto,它使用了与Spring Crypto相同的算法。

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

附注:您可能会遇到jdk被限制为128位的情况。要从256位中获益,请确保添加Java Cryptography Extension

票数 1
EN

Stack Overflow用户

发布于 2018-08-27 17:22:12

哈希函数的定义对原图像有抵抗力:给定h( x ),恢复x应该是不可能的。哈希函数是“可逆的”,这一性质正好相反。因此,你不能反转哈希函数,因此不可能从哈希函数中获得实际值,value.You不能从h(x)中获得x,你唯一能做的就是为即将到来的新密码y计算h(y),并查看它是否等于h(x)。

不仅仅是jBcrypt,任何安全的散列函数都不会提供这种恢复功能

票数 0
EN

Stack Overflow用户

发布于 2018-08-27 18:44:09

,但我没有找到从散列值中获取实际值的任何选项

这就是密码学哈希函数的主要目的。

有没有其他方法可以加密和解密java中的值?先谢谢你...

在Java中有很多加密/解密值的例子,只要搜索它,甚至在这里也是如此。你不妨看看my blog about encryption in Java --它是关于基本的低级加密API的。

我希望你的意思不是要对用户密码进行加密--即使是远程的可逆密码也会使你的系统存在泄露的潜在危险。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52036137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档