0

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

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=

任何恢复它的建议:)

4

1 回答 1

9

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

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

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

即使可以找到一条生成相同哈希的消息(例如使用彩虹表;对于像 MD5 这样较弱的哈希算法更容易),您永远不知道该消息是否与用于生成哈希的原始消息相同。防止查找(猜测)生成相同哈希值的消息(密码)的方法之一是在对消息(密码)进行哈希处理时使用

编辑

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

于 2013-01-11T17:09:57.837 回答