프로그래밍을 통해 SHA1 얻기

Dec 11 2020

이것은 signinig 보고서의 내 앱과 같은 것입니다.

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

Android 프로그래밍을 통해이 코드 (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

버전 확인을 찾고있는 것 같습니다. 그렇다면 해싱의 목적을 오해하고있는 것입니다. 해싱은 데이터 무결성을 확인하기위한 것이지 확인하기위한 것이 아닙니다. 값을 업로드하고 서버에서 확인하는 경우 해시 사용 여부에 관계없이 보안 차이가 없습니다.