java - 解密散列密码

标签 java security passwords password-protection password-encryption

我有以下代码来加密密码,但是当我尝试对其进行解码时,我没有得到预期的结果,这里是代码。

BASE64Encoder encoder = new BASE64Encoder();
String afterhex=toSHA1("mypassword".getBytes());
String encodedBytes = encoder.encodeBuffer(afterhex.getBytes());

public static String toSHA1(byte[] convertme) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-1");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return new String(md.digest(convertme));
}

例如,如果您尝试编码 jill,您应该得到 LQBIF2TS0FSDYtGjaNmC2gl/klw=

任何恢复它的建议:)

最佳答案

哈希算法不是加密/解密算法。

散列是将可变长度的大型数据集(例如消息)映射到固定长度的较小数据集(散列)的单向过程。长度取决于哈希算法。

并且不可能执行从散列返回到您的消息的反向操作。

即使可以找到生成相同散列的消息(例如使用 rainbow tables ;对于 MD5 等较弱的散列算法来说更容易),但您永远不知道 如果该消息与用于生成哈希的原始消息相同。防止查找(猜测)生成相同哈希值的消息(密码)的方法之一是使用 salt对消息(密码)进行哈希处理时。

编辑

我还会推荐任何Bruce Schneier书籍,例如“密码学工程:设计原理和实际应用”(以非常好的且易于理解的方式编写),它将详细描述密码学和散列。

关于java - 解密散列密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14283084/

相关文章:

html - 如何使用密码保护托管在 Amazon Web Services (AWS) 上的网站

security - 将密码安全地存储在数据库中

java - 如何使用 Selenium 填写自动完成输入框? (为什么自动输入不加载自动完成选项,而手动输入却加载?)

java - 使用引用变量指向比较器?

java - 来自服务的通知

c# - 以编程方式关闭请求验证

java - Java 配置中的 Spring Security XML 配置和 Spring SAML

java - 用于枚举的自定义 Xstream/JSON 转换器

objective-c - 仅要求标准帐户的管理员权限

angularjs - iOS/安卓 : Open numeric keyboard on password-type input field