解密哈希密码

use*_*639 0 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));
}
Run Code Online (Sandbox Code Playgroud)

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

任何恢复它的建议:)

Tom*_*Tom 9

散列算法不是加密/解密算法.

散列单向的映射大的数据集的可变长度(例如消息),以较小的数据集的固定长度(散列)的过程.长度取决于散列算法.

并且从哈希回到您的消息执行反向操作是不可能的.

尽管可以找到生成相同哈希的消息(例如使用彩虹表 ;对于较弱的哈希算法(如MD5)更容易),但您永远不知道该消息是否与用于生成哈希的原始消息相同.防止查找(猜测)生成相同散列值的消息(密码)的方法之一是在散列按摩(密码)时使用salt.

编辑

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

  • +1回答很好.然而,它们可以通过使用彩虹表或暴力攻击来破解. (3认同)