【问题标题】:How do I generate SHA512 checksum for an Android Apk file on android studio如何在 android studio 上为 Android Apk 文件生成 SHA512 校验和
【发布时间】:2021-07-19 10:08:49
【问题描述】:

我需要为下载的 apk 文件生成校验和,并与下载 apk 时发送的另一个校验和进行比较。这必须在 android studio 中完成。

【问题讨论】:

  • 在 SO 中展示一些代码并解释您迄今为止尝试过的内容是一种很好的做法。

标签: java android kotlin checksum sha512


【解决方案1】:

您基本上是在要求计算文件的 SHA-512,不管它是什么类型的文件:apk、zip、exe...

有很多关于在 Android 上计算不同哈希值的信息。为了过滤答案,我认为您可以考虑 APK 文件的大小。你想计算什么哈希并不重要,因为唯一改变的可能只是一行:

    MessageDigest.getInstance("MD5")
    MessageDigest.getInstance("SHA1")
    MessageDigest.getInstance("SHA-256")
    MessageDigest.getInstance("SHA-512")

例如,如果 APK 非常重,您可以检查一下: How to calculate hash value of a file in Java?

这个很棒,因为它适用于块,因此无需将整个文件加载到内存中。

然后,计算完两个哈希后,您可以将它们转换为 Base64,以便将它们与常规 String 进行比较。

【讨论】:

    【解决方案2】:

    之前的答案确实有效,但代码很多。 找到了一种使用 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)
            }
        }
    

    注意 -- 目的地是带有文件名的文件的路径

    样本

    var destination = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()/filename.apk
    

    【讨论】:

      猜你喜欢
      • 2012-10-20
      • 2012-04-09
      • 1970-01-01
      • 2015-04-15
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多