如何正确实现hashCode()以在HashMap中使用它?

时间:2018-01-03 15:55:19

标签: java hash hashmap hashcode

我正在编写一个Java应用程序,用户可以在其中接收一些图像形式的消息。使用隐写算法在这些图像中隐藏了文本消息。如果已编辑图像,则在用户阅读该消息之前,应弹出警告。现在,我的想法是,在一个用户将图像发送到另一个用户之前,图像被散列并作为值存储到接收者的HashMap中。哈希值的关键是该图像的路径。

当用户收到图像时,在解密之前,他们首先需要对所选图像进行哈希处理,然后将该图像的哈希值与之前添加到其HashMap中的哈希值进行比较。这是我的代码:

public String hashTheImage(byte[] image) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    return byteArray2Hex(md.digest(image));
}

private static String byteArray2Hex(final byte[] hash) {
    Formatter formatter = new Formatter();
    for (byte b : hash) {
        formatter.format("%02x", b);
    }
    return formatter.toString();
}

这些方法散列图像。然后我做以下事情:

receiver.getMap().put(image.getPath(), this.hashTheImage(imageBytes));

现在,这是我的方法,我试图检查两个哈希是否相等:

private boolean checkForChanges(String path, String newlyGeneratedHash){
    String receiverHash = receiver.getMap().get(path);
    if(!newlyGeneratedHash.equals(receiverHash)){
        JFrame frame = new JFrame();
        JOptionPane.showMessageDialog(frame, "Image has been edited!", 
            "ERROR!", JOptionPane.ERROR_MESSAGE);
        return false;
    }
    return true;
}

这里我得到了receiverHash为null。我知道我应该覆盖hashCode()和equals()方法,但我不知道如何,因为我只需要它用于字符串。 如果有人能给我一个想法,我会非常感激。请不要粗鲁,只有在你可以并希望提供帮助的情况下才能发表评论。感谢

0 个答案:

没有答案