我正在编写一个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()方法,但我不知道如何,因为我只需要它用于字符串。 如果有人能给我一个想法,我会非常感激。请不要粗鲁,只有在你可以并希望提供帮助的情况下才能发表评论。感谢