是否可以使用java为音频文件添加水印?
问题描述:
我有一个应用程序,如果一个audiofile编辑cckcking。之后,我应该知道是否有人编辑了这个音频文件。我正在考虑在音频文件中添加一个水印,以便稍后检查水印是否已更改,并知道是否编辑了音频文件。是否可以使用java为音频文件添加水印?
此外,有没有另一种方法在java中的音频编辑保护?
答
有一种方法适用于任何文件,而不仅仅是音频。 您可以使用散列算法计算和比较校验和。
Java在java.security.MessageDigest
包中内置了此功能。
为了得到校验,考虑下面的代码片段:
try (FileInputStream inputStream = new FileInputStream(file)) {
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] bytesBuffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = inputStream.read(bytesBuffer)) != -1) {
digest.update(bytesBuffer, 0, bytesRead);
}
byte[] hashedBytes = digest.digest();
return convertByteArrayToHexString(hashedBytes);
} catch (NoSuchAlgorithmException | IOException ex) {
throw new HashGenerationException(
"Could not generate hash from file", ex);
}
这个方法返回身体的字节数组散列的字符串表示的输入文件。您可以在原始和可疑文件上调用此代码并进行比较。如果字符串匹配,文件是相同的。
代码剪断使用快速MD5 angorithm,但你可以选择一些从here:
更加安全的为什么不直接用新的比较原始文件的大小?如果它更大或更小,那么它被编辑。或者保存创建/上传/不管什么日期并与修改日期进行比较。 –
为什么不使用散列? – Palcente
而不是水印,比较校验和。 –