我有以下代码来加密密码,但是当我尝试解码时,我没有得到预期的结果是代码。
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=
有关恢复它的任何建议:)
答案 0 :(得分:9)
哈希算法不是加密/解密算法。
散列是将可变长度(例如消息)的大型数据集映射到固定长度(散列)的较小数据集的单向过程。长度取决于散列算法。
不可能执行从哈希回到您的邮件的反向操作。
即使可以找到生成相同哈希的消息(例如使用rainbow tables;对于像MD5这样较弱的哈希算法来说也容易得多),永远不会知道< / strong>如果消息与用于生成散列的原始消息相同。阻止查找(猜测)生成相同哈希值的消息(密码)的方法之一是在散列按摩(密码)时使用salt。
修改强>
我还会推荐任何 Bruce Schneier 书籍,例如“密码工程:设计原则和实际应用程序”(以非常好的和易消化的方式编写),它将详细描述加密和散列。