解密哈希密码

时间:2013-01-11 17:04:33

标签: 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));
}

例如,如果你试图进行编码,那么你应该得到LQBIF2TS0FSDYtGjaNmC2gl/klw=

有关恢复它的任何建议:)

1 个答案:

答案 0 :(得分:9)

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

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

不可能执行从哈希回到您的邮件的反向操作。

即使可以找到生成相同哈希的消息(例如使用rainbow tables;对于像MD5这样较弱的哈希算法来说也容易得多),永远不会知道< / strong>如果消息与用于生成散列的原始消息相同。阻止查找(猜测)生成相同哈希值的消息(密码)的方法之一是在散列按摩(密码)时使用salt

修改

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