Какой конкретный алгоритм хэша возвращает MessageDigest.getInstance( "SHA" )?
MessageDigest.getInstance("SHA")
, похоже, работает и дает мне MessageDigest
, но я не могу сказать, какой алгоритм он мне дает.
Это SHA-1 или SHA-0 или...?
Меня не интересует, что происходит на моей машине. Я хочу знать, вернет ли он sha0 или sha1 для всех допустимых реализаций Java (или undefined).
Ответы
Ответ 1
Спецификация JCE содержит стандартные имена, которые, как ожидается, будет поддерживать реализация. "SHA-1" указан как SHA-256, SHA-384 и SHA-512. "SHA", "SHA-0" и SHA-2 "не являются стандартными именами и, следовательно, могут вообще не поддерживаться. Вы не можете гарантировать, что" SHA "вернется, если вообще что-то, потому что оно не соответствует стандарту.
Ответ 2
SHA-0 устарел. Для использования с Java JCE MessageDigest, SHA == SHA-1 для некоторых поставщиков JCE. Кстати, SHA-1 не считается защищенным сегодня компьютерами и технологиями. SHA-512 по-прежнему безопасен практически для всего. SHA-256 в порядке для большинства вещей.
Вы можете указать протоколы, доступные в версии Java, которые вы используете с этим кодом. (Я получил здесь):
import java.security.Provider;
import java.security.Security;
public class JceLook {
public static void main(String[] args) {
System.out.println("Algorithms Supported in this JCE.");
System.out.println("====================");
// heading
System.out.println("Provider: type.algorithm -> className" + "\n aliases:" + "\n attributes:\n");
// discover providers
Provider[] providers = Security.getProviders();
for (Provider provider : providers) {
System.out.println("<><><>" + provider + "<><><>\n");
// discover services of each provider
for (Provider.Service service : provider.getServices()) {
System.out.println(service);
}
System.out.println();
}
}
}
Он отобразит такую информацию для всех доступных алгоритмов. (Обратите внимание, что это фактический вывод из программы выше для некоторого уровня обновления Oracle/Sun Java 6, и это показывает, что SHA эквивалентен SHA-1 и SHA1. Вы можете передать любую из трех строк в MessageDigest и получить тот же результат, Но это зависит от поставщика криптографии (JCE) и может быть не таким.)
SUN: MessageDigest.SHA -> sun.security.provider.SHA
aliases: [SHA-1, SHA1]
attributes: {ImplementedIn=Software}
Если вы загружаете дополнительных поставщиков (например, BouncyCastle), они также покажут их.