Java 通过编程获得SHA1

Java 通过编程获得SHA1,java,android,gradle,signing,cracking,Java,Android,Gradle,Signing,Cracking,这是一个类似signinig report的我的应用程序: Variant: release Config: config Store: C:\Users\Superman\Desktop\web.jks Alias: web MD5: 8C:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SHA1: D3:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SHA-256: A0:00:00

这是一个类似signinig report的我的应用程序:

Variant: release
Config: config
Store: C:\Users\Superman\Desktop\web.jks
Alias: web
MD5: 8C:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
SHA1: D3:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
SHA-256: A0:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
Valid until: Sunday, December 4, 2044
有没有办法通过Android编程获得这些代码(MD5、SHA1、SHA-256)?
我想在服务器上保存其中一个。使用应用程序时,应使用服务器中存储的值检查这些值,如果不相等,则退出并终止进程(我这样做是为了防止我的应用程序崩溃)

您似乎在寻找版本检查。 如果是这样,您就误解了散列的目的。 散列用于检查数据完整性,而不是验证。 如果您只是上传值并在服务器中进行检查,那么使用散列与不使用散列没有任何安全区别。

此答案取自 查看此函数

// key like: SHA1, SHA256, MD5.
private fun get(key: String, info: PackageInfo) {
    try {
        for (signature in info.signatures) {
            val md: MessageDigest = MessageDigest.getInstance(key)
            md.update(signature.toByteArray())
            val digest: ByteArray = md.digest()
            val toRet = StringBuilder()
            for (i in digest.indices) {
                if (i != 0) toRet.append(":")
                val b: Byte = digest[i] and 0xff.toByte()
                val hex = Integer.toHexString(b.toInt())
                if (hex.length == 1) toRet.append("0")
                toRet.append(hex)
            }
            Log.d(TAG, "key: $key $toRet")
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e(TAG, e1.toString())
    } catch (e: NoSuchAlgorithmException) {
        Log.e(TAG, e.toString())
    } catch (e: Exception) {
        Log.e(TAG, e.toString())
    }
}
要使用它,请这样称呼它

get("SHA1", packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES))

感谢您的回答,我不是有意将文件转换为哈希代码,@SuperMan From:“在密码学中,SHA-1(安全哈希算法1)是一个加密哈希函数。”应用MD5、SHA1和SHA-256的结果都是散列码。@Andreas我知道,但我的目的是做一些类似于“部族冲突”游戏的事情,在“部族冲突”游戏中,首先,将检查游戏文件,如果文件中有任何更改,你将被阻止进入游戏。@SuperMan我是在评论你的矛盾,你想要SHA-1而不是散列码,因为SHA-1是散列码,也就是摘要。