Mendapatkan SHA1 melalui pemrograman
Ini adalah sesuatu seperti 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
Apakah ada cara untuk mendapatkan kode ini (MD5, SHA1, SHA-256) melalui pemrograman Android? Saya ingin menyimpan salah satunya di server. Saat menggunakan aplikasi, nilai-nilai ini harus diperiksa dengan nilai-nilai yang disimpan di server, jika tidak sama dengan keluar dan menghentikan proses (saya melakukan ini untuk mencegah aplikasi saya dari retak)
Jawaban
Jawaban ini diambil dari jawaban lain. Lihat fungsi ini
// 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())
}
}
Untuk menggunakannya, sebut saja seperti ini
get("SHA1", packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES))
Tampaknya Anda sedang mencari pemeriksaan versi. Jika demikian, Anda salah paham tentang tujuan hashing. Hashing untuk memeriksa integritas data dan bukan untuk memverifikasi. Tidak ada bedanya keamanan menggunakan hash atau tidak, jika Anda hanya mengunggah nilai dan memeriksanya di server.