Obtener SHA1 a través de la programación
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
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))
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.