प्रोग्रामिंग के माध्यम से SHA1 प्राप्त करना
यह साइनइनिग रिपोर्ट के मेरे ऐप की तरह कुछ है:
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
क्या एंड्रॉइड प्रोग्रामिंग के माध्यम से इस कोड (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))
ऐसा लगता है कि आप एक संस्करण की जाँच कर रहे हैं। यदि हां, तो आप हैशिंग के उद्देश्य को गलत समझ रहे हैं। हैशिंग डेटा अखंडता की जाँच करने के लिए है न कि सत्यापन के लिए। यह हैश का उपयोग करके कोई सुरक्षा अंतर नहीं करता है या नहीं, यदि आप केवल मूल्य अपलोड कर रहे हैं और इसे सर्वर में जांचें।