Spec-Zone.ru › OpenJDK 24

Класс MessageDigest

java.lang.Object
java.security.MessageDigestSpi
java.security.MessageDigest
public abstract class MessageDigest extends MessageDigestSpi
Этот MessageDigest класс предоставляет приложениям функциональность алгоритма хеширования сообщений, такого как SHA-1 или SHA-256. Хеши сообщений — это безопасные односторонние хеш-функции, которые принимают данные произвольной длины и возвращают значение хеша фиксированной длины.

Объект MessageDigest инициализируется по умолчанию. Данные обрабатываются с помощью методов update. В любой момент можно вызвать метод reset для сброса хеширования. После обработки всех данных, которые необходимо обновить, необходимо вызвать один из методов digest для завершения вычисления хеша.

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

Реализации могут реализовать интерфейс Cloneable. Приложения-клиенты могут проверить возможность клонирования, попытавшись выполнить клонирование и перехватив исключение CloneNotSupportedException:


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

 try {
     md.update(toChapter1);
     MessageDigest tc1 = md.clone();
     byte[] toChapter1Digest = tc1.digest();
     md.update(toChapter2);
     ...etc.
 } catch (CloneNotSupportedException cnse) {
     throw new DigestException("couldn't make digest of partial content");
 }
 

Обратите внимание, что если данная реализация не поддерживает клонирование, всё же можно вычислить промежуточные хеши, создав несколько экземпляров, если количество хешей известно заранее.

Обратите внимание, что этот класс является абстрактным и наследуется от MessageDigestSpi по историческим причинам. Разработчики приложений должны обращать внимание только на методы, определённые в этом MessageDigest классе; все методы в суперклассе предназначены для поставщиков криптографических сервисов, которые хотят предоставить свои собственные реализации алгоритмов хеширования сообщений.

Каждая реализация платформы Java обязана поддерживать следующие стандартные MessageDigest алгоритмы:

  • SHA-1
  • SHA-256
Эти алгоритмы описаны в разделе MessageDigest спецификации Java Security Standard Algorithm Names. Обратитесь к документации выпуска вашей реализации, чтобы узнать, поддерживаются ли какие-либо другие алгоритмы.
С тех пор:
1.1
См. также:
  • DigestInputStream
  • DigestOutputStream

Краткое описание конструкторов

MessageDigest(String algorithm)
Модификатор Конструктор Описание
protected
Создаёт хеширование сообщений с указанным именем алгоритма.

Краткое описание методов

Модификатор и тип Метод Описание
Object clone()
Возвращает клон, если реализация поддерживает клонирование.
byte[] digest()
Завершает вычисление хеша, выполняя заключительные операции, такие как заполнение.
byte[] digest(byte[] input)
Выполняет заключительное обновление хеша с использованием указанного массива байтов, затем завершает вычисление хеша.
int digest(byte[] buf, int offset, int len)
Завершает вычисление хеша, выполняя заключительные операции, такие как заполнение.
final String getAlgorithm()
Возвращает строку, идентифицирующую алгоритм, независимо от деталей реализации.
final int getDigestLength()
Возвращает длину хеша в байтах или 0, если операция не поддерживается поставщиком и реализация не поддерживает клонирование.
static MessageDigest getInstance(String algorithm)
Возвращает объект MessageDigest, который реализует указанный алгоритм хеширования.
static MessageDigest getInstance(String algorithm, String provider)
Возвращает объект MessageDigest, который реализует указанный алгоритм хеширования.
static MessageDigest getInstance(String algorithm, Provider provider)
Возвращает объект MessageDigest, который реализует указанный алгоритм хеширования.
final Provider getProvider()
Возвращает поставщика этого объекта хеширования сообщений.
static boolean isEqual(byte[] digesta, byte[] digestb)
Сравнивает два хеша на равенство.
void reset()
Сбрасывает хеширование для дальнейшего использования.
String toString()
Возвращает строковое представление объекта хеширования сообщений.
void update(byte input)
Обновляет хеширование с использованием указанного байта.
void update(byte[] input)
Обновляет хеширование с использованием указанного массива байтов.
void update(byte[] input, int offset, int len)
Обновляет хеширование с использованием указанного массива байтов, начиная с указанного смещения.
final void update(ByteBuffer input)
Обновляет хеширование с использованием указанного ByteBuffer.

Методы, объявленные в классе java.security.MessageDigestSpi

engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate, engineUpdate

Методы, объявленные в классе java.lang.Object

equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

MessageDigest

protected MessageDigest(String algorithm)
Создаёт объект MessageDigest с указанным именем алгоритма.
Параметры:
algorithm - стандартное имя алгоритма хэширования. См. раздел MessageDigest в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов.

Подробное описание методов

getInstance

public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
Возвращает объект MessageDigest, реализующий указанный алгоритм хэширования.

Этот метод перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект MessageDigest, содержащий реализацию MessageDigestSpi от первого поставщика, поддерживающего указанный алгоритм.

Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().

Примечание по реализации:
Реализация JDK дополнительно использует свойство jdk.security.provider.preferred Security для определения предпочтительного порядка поставщиков для указанного алгоритма. Этот порядок может отличаться от порядка поставщиков, возвращаемого методом Security.getProviders().
Параметры:
algorithm - имя запрашиваемого алгоритма. См. раздел MessageDigest в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов.
Возвращает:
объект MessageDigest, реализующий указанный алгоритм
Исключения:
NoSuchAlgorithmException - если ни один Provider не поддерживает реализацию MessageDigestSpi для указанного алгоритма
NullPointerException - если algorithm является null
См. также:
  • Provider

getInstance

public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
Возвращает объект MessageDigest, реализующий указанный алгоритм хэширования.

Возвращается новый объект MessageDigest, содержащий реализацию MessageDigestSpi от указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.

Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().

Параметры:
algorithm - имя запрашиваемого алгоритма. См. раздел MessageDigest в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов.
provider - имя поставщика.
Возвращает:
объект MessageDigest, реализующий указанный алгоритм
Исключения:
IllegalArgumentException - если имя поставщика является null или пустым
NoSuchAlgorithmException - если реализация MessageDigestSpi для указанного алгоритма недоступна от указанного поставщика
NoSuchProviderException - если указанный поставщик не зарегистрирован в списке поставщиков безопасности
NullPointerException - если algorithm является null
См. также:
  • Provider

getInstance

public static MessageDigest getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
Возвращает объект MessageDigest, реализующий указанный алгоритм хэширования.

Возвращается новый объект MessageDigest, содержащий реализацию MessageDigestSpi от указанного поставщика. Обратите внимание, что указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.

Параметры:
algorithm - имя запрашиваемого алгоритма. См. раздел MessageDigest в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов.
provider - поставщик.
Возвращает:
объект MessageDigest, реализующий указанный алгоритм
Исключения:
IllegalArgumentException - если указанный поставщик является null
NoSuchAlgorithmException - если реализация MessageDigestSpi для указанного алгоритма недоступна от указанного объекта Provider
NullPointerException - если algorithm является null
С момента:
1.4
См. также:
  • Provider

getProvider

public final Provider getProvider()
Возвращает поставщика этого объекта MessageDigest.
Возвращает:
поставщик этого объекта MessageDigest

update

public void update(byte input)
Обновляет дайджест с помощью указанного байта.
Параметры:
input - байт, используемый для обновления дайджеста.

update

public void update(byte[] input, int offset, int len)
Обновляет дайджест с помощью указанного массива байтов, начиная с указанного смещения.
Параметры:
input - массив байтов.
offset - смещение для начала в массиве байтов.
len - количество байтов для использования, начиная со смещения offset.

update

public void update(byte[] input)
Обновляет дайджест с помощью указанного массива байтов.
Параметры:
input - массив байтов.

update

public final void update(ByteBuffer input)
Обновляет дайджест с помощью указанного буфера ByteBuffer. Дайджест обновляется с помощью input.remaining() байтов, начиная со смещения input.position(). По возвращении позиция буфера будет равна его пределу; его предел не изменится.
Параметры:
input - буфер ByteBuffer
С момента:
1.5

digest

public byte[] digest()
Завершает вычисление хэша, выполняя окончательные операции, такие как заполнение. Дайджест сбрасывается после вызова этого метода.
Возвращает:
массив байтов для результирующего значения хэша.

digest

public int digest(byte[] buf, int offset, int len) throws DigestException
Завершает вычисление хэша, выполняя окончательные операции, такие как заполнение. Дайджест сбрасывается после вызова этого метода.
Параметры:
buf - буфер вывода для вычисленного дайджеста
offset - смещение в буфере вывода для начала сохранения дайджеста
len - количество байтов в буфере buf, выделенное для дайджеста
Возвращает:
количество байтов, помещённых в buf
Исключения:
DigestException - если произошла ошибка.

digest

public byte[] digest(byte[] input)
Выполняет окончательное обновление дайджеста с использованием указанного массива байтов, затем завершает вычисление дайджеста. То есть, этот метод сначала вызывает update(input), передавая массив input методу update, а затем вызывает digest().
Параметры:
input - входные данные, которые будут обновлены перед завершением вычисления дайджеста.
Возвращает:
массив байтов для результирующего значения хэша.

toString

public String toString()
Возвращает строковое представление этого объекта MessageDigest.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление объекта

isEqual

public static boolean isEqual(byte[] digesta, byte[] digestb)
Сравнивает два дайджеста на равенство. Два дайджеста равны, если они имеют одинаковую длину и все байты в соответствующих позициях равны.
Примечание по реализации:
Все байты в digesta проверяются на равенство, если digestb не является null или имеет нулевую длину. Если digestb не null и не имеет нулевой длины, то время вычисления зависит только от длины digesta. Оно не зависит от длины digestb или содержимого digesta и digestb.
Параметры:
digesta - один из дайджестов для сравнения.
digestb - другой дайджест для сравнения.
Возвращает:
true, если дайджесты равны, false в противном случае.

reset

public void reset()
Сбрасывает дайджест для дальнейшего использования.

getAlgorithm

public final String getAlgorithm()
Возвращает строку, идентифицирующую алгоритм, независимо от деталей реализации. Название должно соответствовать стандартному имени Java Security (например, "SHA-256"). См. раздел MessageDigest в спецификации стандартных имен алгоритмов Java Security для получения информации о стандартных именах алгоритмов.
Возвращает:
имя алгоритма

getDigestLength

public final int getDigestLength()
Возвращает длину дайджеста в байтах или 0, если эта операция не поддерживается поставщиком, и реализация не клонируема.
Возвращает:
длину дайджеста в байтах или 0, если эта операция не поддерживается поставщиком, и реализация не клонируема.
С момента:
1.2

clone

public Object clone() throws CloneNotSupportedException
Возвращает копию, если реализация клонируема.
Переопределяет:
clone в классе MessageDigestSpi
Возвращает:
копию, если реализация клонируема.
Исключение:
CloneNotSupportedException - если это вызывается на реализации, которая не поддерживает Cloneable.
См. также:
  • Cloneable

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/security/MessageDigest.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API