SHA1'i programlama yoluyla edinme
Bu, oturum açma raporunun benim uygulamam olduğu gibi bir şey:
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
Bu kodu (MD5, SHA1, SHA-256) Android programlama yoluyla almanın bir yolu var mı? Bunlardan birini sunucuya kaydetmek istiyorum. Uygulamayı kullanırken, bu değerler sunucuda depolanan değerlerle kontrol edilmelidir, eğer eşit değilse çıkış yap ve işlemi sonlandır (bunu uygulamamın çatlamasını önlemek için yapıyorum)
Yanıtlar
Bu cevap başka bir cevaptan alındı Bu işleve bak
// 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())
}
}
Onu kullanmak için böyle çağır
get("SHA1", packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES))
Görünüşe göre bir sürüm kontrolü arıyorsunuz. Eğer öyleyse, hashing işleminin amacını yanlış anlıyorsunuz. Hashing veri bütünlüğünü kontrol etmek içindir, doğrulama için değildir. Sadece değeri yüklüyorsanız ve sunucuda kontrol ediyorsanız, hash kullanıp kullanmama hiçbir güvenlik farkı yaratmaz.