प्रोग्रामिंग के माध्यम से SHA1 प्राप्त करना

Dec 11 2020

यह साइनइनिग रिपोर्ट के मेरे ऐप की तरह कुछ है:

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) को प्राप्त करने का कोई तरीका है? मैं उनमें से एक को सर्वर पर सहेजना चाहता हूं। एप्लिकेशन का उपयोग करते समय, इन मूल्यों को सर्वर में संग्रहीत मानों के साथ जांचना चाहिए, यदि यह समान निकास नहीं है और प्रक्रिया को मारता है (मैं अपने ऐप को टूटने से बचाने के लिए ऐसा करता हूं)

जवाब

1 MohammadKhairPK Dec 11 2020 at 16:17

यह जवाब यह एक और जवाब से लिया इस समारोह की जाँच करें

// 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))
1 mingchen Dec 11 2020 at 16:10

ऐसा लगता है कि आप एक संस्करण की जाँच कर रहे हैं। यदि हां, तो आप हैशिंग के उद्देश्य को गलत समझ रहे हैं। हैशिंग डेटा अखंडता की जाँच करने के लिए है न कि सत्यापन के लिए। यह हैश का उपयोग करके कोई सुरक्षा अंतर नहीं करता है या नहीं, यदि आप केवल मूल्य अपलोड कर रहे हैं और इसे सर्वर में जांचें।