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

你不解密哈希值。 – Woot4Moo

+1

**哈希!=加密!** – SLaks

+0

这是无法回答的,因为您无法解密哈希。 –

回答

8

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

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

而且它是不可能执行逆向操作从哈希回到您的消息。

即使它是有可能找到一个消息产生相同的哈希值(使用rainbow tables例如,更容易为弱哈希算法,如MD5),你永远不知道如果消息是等同于原来这被用来生成散列。散列按摩(密码)时的方法的一个这防止发现(猜测)的消息(密码)生成相同的哈希值使用salt

编辑

我也会推荐任何布鲁斯的例如书籍“加密工程:设计原则和实际应用”(写在一个很不错易消化方式),将描述很详细的加密和散列。

+3

+1为好的答案。然而,他们可以通过使用彩虹桌或蛮力攻击来破解。 – Smit

+1

@smit我认为这个词被破解被滥用,发现碰撞更为正确。 – Woot4Moo

+0

@ Woot4Moo不能得到关于特定单词的想法。 ; - } – Smit