我有以下代码来加密密码,但是当我尝试对其进行解码时,我没有得到预期的结果,这里是代码。
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/