Все ли телефоны Android поддерживают SHA-256

Итак, прочтите этот пост: Как могу ли я вычислить хэш SHA-256 строки в Android?

и документы: http://developer.android.com/reference/java/security/MessageDigest.html

Мне любопытно; какие телефоны будут поддерживать SHA-256? В документации строка об исключении «NoSuchAlgorithmException» заставляет меня думать, что некоторые телефоны поддерживают не все алгоритмы. Прежде чем я начну реализовывать это для приложения и ожидать, что оно будет работать одинаково на всех телефонах, я хочу знать, знает ли кто-нибудь что-нибудь об этом ...?

Мне кажется странным, что в классе MessageDigest нет констант для выбора алгоритма, который вы хотите использовать.


person joshkendrick    schedule 12.04.2012    source источник
comment
+1 Хороший вопрос. Полностью согласен, что константы должны быть.   -  person Chris Cashwell    schedule 12.04.2012


Ответы (4)


Все устройства Android поддерживают SHA-256. NoSuchAlgorithmException указывает, что запрошенный алгоритм не может быть найден, и это необходимо, потому что метод принимает аргумент String в качестве имени алгоритма. Если вы передали «foo-256», единственный выход метода - это выбросить NoSuchAlgorithmException, потому что по причинам, не понятным мне, не существует алгоритма с именем «foo-256». Предполагая, что вы передаете имя, которое, как вы уверены, является алгоритмом, который может использовать Android, вы никогда не увидите этого исключения.

person Chris Cashwell    schedule 12.04.2012
comment
Хотя я в основном согласен, вы не можете быть на 100% уверены, что все устройства поддерживают SHA-256. Однако маловероятно, что кто-то может решить сэкономить несколько байтов и вытащить их. Тем более что, если на устройстве нет приложения Market / Play, нет четкого определения того, что «Android» должен поддерживать. Вы всегда можете перечислить поддерживаемые алгоритмы / механизмы с чем-то вроде этого, если вам нужно быть уверенным: stackoverflow.com/questions/3683302/ - person Nikolay Elenkov; 13.04.2012
comment
Что ж: 1. Android никогда не использовал JDK: и основные библиотеки (некоторые из них получены из Apache Harmony) и JVM (Dalvik) являются собственными. 2. MessageDigest - это просто интерфейс JCE, чтобы иметь возможность использовать SHA-256, MD5 или что-то еще, должен быть Provider, реализующий эти алгоритмы. Поставщик JCE для Android является производным от BouncyCastle и, как известно, довольно урезан, особенно в более ранних версиях Android. Производители действительно настраивают оба фреймворка, иногда довольно агрессивно. Это также может включать системного поставщика JCE. - person Nikolay Elenkov; 13.04.2012
comment
На самом деле вы упускаете главное: интерфейс! = Реализация. - person Nikolay Elenkov; 16.04.2012

Добавьте NoSuchAlgorithmException, как показано ниже:

public static String SHA256 (String text) throws NoSuchAlgorithmException {

    MessageDigest md = MessageDigest.getInstance("SHA-256");

    md.update(text.getBytes());
    byte[] digest = md.digest();

    return Base64.encodeToString(digest, Base64.DEFAULT);
}
person Soheil    schedule 18.09.2013

SHA-256withRSA НЕ поддерживается в более старых версиях Android (подтверждено аналогичным образом в Android 4.0.3, 4.1.1). У меня возникла эта проблема при использовании JSCEP. Сервер SCEP возвращает алгоритм дайджеста SHA-256. Но SHA-256withRSA не присутствует ни в каких SecurityProvider по умолчанию в этих версиях Android. Обнаружена соответствующая ссылка: Какие версии Android поддерживают какие алгоритмы подписи пакетов ?

Эта ссылка показывает, что SHA-256withRSA был добавлен позже: https://android-review.googlesource.com/44360

person garnet    schedule 04.11.2014

Согласно документации Android для MessageDigest, SHA-256 поддерживается начиная с API 1.

введите описание изображения здесь

person Megaetron    schedule 19.04.2019