我需要一种方法来计算某些文件的md5,以确保Android中的完整性。
所以我使用org.apache.commons.codec.digest.DigestUtils.md5Hex方法来计算文件的md5,但是我得到的结果与我在linux系统中使用@app.route('/somepage')
def somepage():
headers={'SomeName':'whatever'}
return Response(redirect(url_for('home_page')),status=302, headers=headers)
@app.route('/home_page')
def home_page():
if request.headers['SomeName'] == 'whatever':
return render_template("home_page.html")
else:
return Response(status=405)
的结果不同。
md5sum的结果不能错,所以我不知道我的代码有什么问题。
代码如下(我使用kotlin,但它与Java相同)):
md5sum
我使用fis和bf作为md5Hex()的参数,它们有不同的结果但不是正确的结果。 但是当我使用像“md5sum”这样的字符串时,我得到的结果与Linux中的其他地方相同。 怎么了?
答案 0 :(得分:0)
我有一个UtilsEncrypt类来获取带有不同算法的哈希,但是我使用的是java.security而不是commons.codec.digest所以我的导入是:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
这是我的代码
public class UtilsEncrypt {
/**
* @param digest
encrypted message
*
* @return String
result in Hexadecimal format
*/
private static String toHexadecimal(byte[] digest) {
String hash = "";
for (byte aux : digest) {
int b = aux & 0xff;
if (Integer.toHexString(b).length() == 1)
hash += "0";
hash += Integer.toHexString(b);
}
return hash;
}
/***
* Encrypt a message through an algorithm
*
* @param message
* text to encrypt
* @param algorithm
* MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512
* @return encrypted message
*/
public static String getStringMessageDigest(String message, String algorithm) {
byte[] digest = null;
byte[] buffer = message.getBytes();
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.reset();
messageDigest.update(buffer);
digest = messageDigest.digest();
} catch (NoSuchAlgorithmException ex) {
// Do something
}
return toHexadecimal(digest);
}
}
如你所见,我只使用java.security给我的功能。您可以将许多不同的算法传递给getStringMessageDigest。我有一个与我使用的类型的枚举。也许你可以使用其他算法,但我没有与其他人测试过。 小心重置diggest,以确保你内心没有错误的内容,你将使用一个空的' diggest。
答案 1 :(得分:0)
我遇到了同样的问题,经过一番努力后,我来到这个解决方案,我使用Okio并且代码测试与Php哈希算法兼容。
首先使用md5函数扩展Java File类
import okio.HashingSource
import okio.Okio
import java.io.File
fun File.md5():String?{
if(!this.exists())
return null
val hashingSource = HashingSource.md5(Okio.source(this))
val bufferedSource = Okio.buffer(hashingSource)
while(!bufferedSource.exhausted()){
bufferedSource.readByteArray(1024)
}
return hashingSource.hash().hex()
}
然后您只需从文件中生成md5:
val file = File("myfile.ext");
println("File md5: ${file.md5()}")
注意:如果找不到该文件,该函数将返回null