Получение 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) через программирование Android? Я хочу сохранить один из них на сервере. При использовании приложения эти значения должны сверяться со значениями, хранящимися на сервере, если они не равны, выйдите и завершите процесс (я делаю это, чтобы предотвратить взлом моего приложения)

stackoverflow.com/questions/304268/…
ming chen 11.12.2020 08:40

Спасибо за ответ, я не хотел конвертировать файл в хэш-код,

Super Man 11.12.2020 08:49

@SuperMan Из Википедии: «В криптографии SHA-1 (Secure Hash Algorithm 1) — это криптографическая хэш-функция». --- Результатом применения MD5, SHA1 и SHA-256 являются хэш-коды.

Andreas 11.12.2020 09:08

@Andreas Я понимаю, но моя цель сделать что-то похожее на игру Clash of clans. В игре Clash of clans сначала будут проверены файлы игры, и если в файлах есть какие-либо изменения, вам будет запрещено войти в игра.

Super Man 11.12.2020 09:21

@SuperMan Я комментировал ваше противоречие, что вам нужен SHA-1, но не хэш-код, учитывая, что SHA-1 — это хэш-код, он же дайджест.

Andreas 11.12.2020 11:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
240
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Кажется, вы ищете проверку версии. Если это так, вы неправильно понимаете цель хеширования. Хеширование предназначено для проверки целостности данных, а не для проверки. Нет никакой разницы в безопасности, используя хэш или нет, если вы просто загружаете значение и проверяете его на сервере.

Ответ принят как подходящий

Этот ответ взят из другого ответа Проверьте эту функцию

// 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))

Другие вопросы по теме