如何在 android studio 上为 Android Apk 文件生成 SHA512 校验和
How do I generate SHA512 checksum for an Android Apk file on android studio
我需要为下载的 apk 文件生成校验和,并与下载 apk 时发送的另一个校验和进行比较。这必须在 android 工作室中完成。
您基本上是在要求计算文件的 SHA-512,文件类型无关紧要:apk、zip、exe...
Android 上有很多关于计算不同哈希值的信息。为了过滤答案,我认为您可以考虑 APK 文件的大小。您想要计算什么哈希并不重要,因为唯一改变的可能只是一行:
MessageDigest.getInstance("MD5")
MessageDigest.getInstance("SHA1")
MessageDigest.getInstance("SHA-256")
MessageDigest.getInstance("SHA-512")
例如,如果APK很重,你可以检查一下:
这个很棒,因为它可以处理块,所以不需要将整个文件加载到内存中。
然后,一旦你计算了两个哈希值,你就可以将它们转换为 Base64,以便像常规那样比较它们 String
。
之前的答案确实有效,但是代码很多。
找到了使用 apache commons 的简单方法。
添加 apache commons 以构建 gradle
implementation group: 'commons-codec', name: 'commons-codec', version: '1.12'
private fun checksum(destination: String) {
try {
val array = Files.readAllBytes(Paths.get(destination))
val genchecksum = DigestUtils.sha512Hex(array)
apkChecksum = genchecksum.toString()
} catch (e: Exception) {
Log.e(javaClass.simpleName, "File error", e)
}
}
注意 -- destination 是文件名
的文件的路径
示例
var destination = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()/filename.apk
我需要为下载的 apk 文件生成校验和,并与下载 apk 时发送的另一个校验和进行比较。这必须在 android 工作室中完成。
您基本上是在要求计算文件的 SHA-512,文件类型无关紧要:apk、zip、exe...
Android 上有很多关于计算不同哈希值的信息。为了过滤答案,我认为您可以考虑 APK 文件的大小。您想要计算什么哈希并不重要,因为唯一改变的可能只是一行:
MessageDigest.getInstance("MD5")
MessageDigest.getInstance("SHA1")
MessageDigest.getInstance("SHA-256")
MessageDigest.getInstance("SHA-512")
例如,如果APK很重,你可以检查一下:
这个很棒,因为它可以处理块,所以不需要将整个文件加载到内存中。
然后,一旦你计算了两个哈希值,你就可以将它们转换为 Base64,以便像常规那样比较它们 String
。
之前的答案确实有效,但是代码很多。 找到了使用 apache commons 的简单方法。
添加 apache commons 以构建 gradle
implementation group: 'commons-codec', name: 'commons-codec', version: '1.12'
private fun checksum(destination: String) {
try {
val array = Files.readAllBytes(Paths.get(destination))
val genchecksum = DigestUtils.sha512Hex(array)
apkChecksum = genchecksum.toString()
} catch (e: Exception) {
Log.e(javaClass.simpleName, "File error", e)
}
}
注意 -- destination 是文件名
的文件的路径示例
var destination = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()/filename.apk