【问题标题】:How can I reverse the output from this method?如何反转此方法的输出?
【发布时间】:2013-10-28 09:03:09
【问题描述】:

我怎样才能从这个方法中反转这个输出? (这样我才能看到明文) 我没有看到任何正在使用的键。

    public String encrypt(String plaintext) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA");
    } catch (NoSuchAlgorithmException e) {
    }
    try {
        md.update(plaintext.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
    }
    byte raw[] = md.digest();
    String hash = (new BASE64Encoder()).encode(raw);
    return hash;
}

【问题讨论】:

  • 顺便说一句:您尝试使异常保持沉默(这几乎可以肯定表示致命的编程错误,因此不应被忽略,也不应发生),但随后您继续使用md,这将是null 如果第一个块失败,那么无论如何您都会因空指针异常而崩溃,或者如果第二个块失败,您将默默地返回错误的哈希值。如果您这样做是为了避免检查异常的麻烦,请从 catch 块中抛出一个更有意义(未检查)的异常。

标签: java encryption base64 md5 sha1


【解决方案1】:

你不能。 SHA 系列是哈希算法;也就是说,它们是产生散列或消息摘要的单向加密算法。没有退路。哈希是任何长度的消息的固定长度结果,其设计目标是在计算上不可能找到两条产生相同哈希值的消息;因此,从所有意图来看,散列可以被视为识别消息。但您无法返回并从中检索消息。

哈希没有键值。可以使用它们进行键控构造,例如消息身份验证代码或 MAC。

该方法实际上命名不佳 - 这本身不是“加密”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2019-04-25
    相关资源
    最近更新 更多