Подтвердить что ты не робот

Какой конкретный алгоритм хэша возвращает MessageDigest.getInstance( "SHA" )?

MessageDigest.getInstance("SHA"), похоже, работает и дает мне MessageDigest, но я не могу сказать, какой алгоритм он мне дает.

Это SHA-1 или SHA-0 или...?


Меня не интересует, что происходит на моей машине. Я хочу знать, вернет ли он sha0 или sha1 для всех допустимых реализаций Java (или undefined).

4b9b3361

Ответ 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), они также покажут их.