Obtener SHA1 a través de la programación

Dec 11 2020

Esto es algo así como signinig report's my app:

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

¿Hay alguna forma de obtener este código (MD5, SHA1, SHA-256) a través de la programación de Android? Quiero guardar uno de ellos en el servidor. Al usar la aplicación, estos valores deben verificarse con los valores almacenados en el servidor, si no es igual, salga y finalice el proceso (hago esto para evitar que mi aplicación se rompa)

Respuestas

1 MohammadKhairPK Dec 11 2020 at 16:17

Esta respuesta se tomó de otra respuesta Verifique esta función

// 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())
    }
}

Para usarlo, llámalo así

get("SHA1", packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES))
1 mingchen Dec 11 2020 at 16:10

Parece que está buscando una verificación de versión. Si es así, está malinterpretando el propósito del hash. El hash es para verificar la integridad de los datos y no para verificar. No hace ninguna diferencia de seguridad usar hash o no, si solo está cargando el valor y lo verifica en el servidor.