Класс 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 алгоритмы:
MD5SHA-1SHA-256
- См. также:
-
DigestInputStream,DigestOutputStream
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
MessageDigest(String algorithm) Создаёт дайджест сообщения со заданным именем алгоритма. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
Object |
clone() Возвращает клон, если реализация поддерживает клонирование. |
byte[] |
digest() Завершает вычисление хеша, выполняя окончательные операции, такие как заполнение. |
byte[] |
digest(byte[] input) Выполняет окончательное обновление дайджеста, используя указанный массив байтов, а затем завершает вычисление дайджеста. |
int |
digest(byte[] buf,
int offset,
int len) Завершает вычисление хеша, выполняя окончательные операции, такие как заполнение. |
String |
getAlgorithm() Возвращает строку, идентифицирующую алгоритм, независимо от реализации. |
int |
getDigestLength() Возвращает длину дайджеста в байтах или 0, если эта операция не поддерживается поставщиком и реализация не поддерживает клонирование. |
static MessageDigest |
getInstance(String algorithm) Возвращает объект MessageDigest, который реализует указанный алгоритм дайджеста. |
static MessageDigest |
getInstance(String algorithm,
Provider provider) Возвращает объект MessageDigest, который реализует указанный алгоритм дайджеста. |
static MessageDigest |
getInstance(String algorithm,
String provider) Возвращает объект MessageDigest, который реализует указанный алгоритм дайджеста. |
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) Обновляет дайджест, используя указанный массив байтов, начиная с указанного смещения. |
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 Cryptography Architecture Standard Algorithm Name для получения информации о стандартных именах алгоритмов.
Методы
getInstance
public static MessageDigest getInstance(String algorithm)
throws NoSuchAlgorithmException Возвращает объект MessageDigest, реализующий указанный алгоритм дайджеста.
Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi от первого поставщика, поддерживающего указанный алгоритм.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Параметры:
-
algorithm- имя запрашиваемого алгоритма. См. раздел MessageDigest в документации Java Cryptography Architecture Standard Algorithm Name для получения информации о стандартных именах алгоритмов. - Возвращает:
- объект Message Digest, реализующий указанный алгоритм.
- Исключения:
-
NoSuchAlgorithmException- если ни один поставщик не поддерживает реализацию MessageDigestSpi для указанного алгоритма. - См. также:
Provider
getInstance
public static MessageDigest getInstance(String algorithm,
String provider)
throws NoSuchAlgorithmException,
NoSuchProviderException Возвращает объект MessageDigest, реализующий указанный алгоритм дайджеста.
Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi от указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Параметры:
-
algorithm- имя запрашиваемого алгоритма. См. раздел MessageDigest в документации Java Cryptography Architecture Standard Algorithm Name для получения информации о стандартных именах алгоритмов. -
provider- имя поставщика. - Возвращает:
- объект MessageDigest, реализующий указанный алгоритм.
- Исключения:
-
NoSuchAlgorithmException- если реализация MessageDigestSpi для указанного алгоритма недоступна от указанного поставщика. -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности. -
IllegalArgumentException- если имя поставщика null или пустое. - См. также:
Provider
getInstance
public static MessageDigest getInstance(String algorithm,
Provider provider)
throws NoSuchAlgorithmException Возвращает объект MessageDigest, реализующий указанный алгоритм дайджеста.
Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi от указанного объекта поставщика. Обратите внимание, что указанный объект поставщика не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
algorithm- имя запрашиваемого алгоритма. См. раздел MessageDigest в документации Java Cryptography Architecture Standard Algorithm Name для получения информации о стандартных именах алгоритмов. -
provider- поставщик. - Возвращает:
- объект MessageDigest, реализующий указанный алгоритм.
- Исключения:
-
NoSuchAlgorithmException- если реализация MessageDigestSpi для указанного алгоритма недоступна от указанного объекта поставщика. -
IllegalArgumentException- если указанный поставщик null. - С тех пор:
- 1.4
- См. также:
Provider
getProvider
public final Provider getProvider()
Возвращает поставщика этого объекта message digest.
- Возвращает:
- поставщик этого объекта message digest
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 - Исключения:
-
DigestException- если произошла ошибка.
digest
public byte[] digest(byte[] input)
Выполняет окончательное обновление дайджеста с использованием указанного массива байтов, затем завершает вычисление дайджеста. То есть, этот метод сначала вызывает update(input), передавая массив input методу update, а затем вызывает digest().
- Параметры:
-
input- входные данные, которые нужно обновить перед завершением вычисления дайджеста. - Возвращает:
- массив байтов для результирующего значения хеша.
toString
public String toString()
Возвращает строковое представление этого объекта message digest.
isEqual
public static boolean isEqual(byte[] digesta,
byte[] digestb) Сравнивает два дайджеста на равенство. Выполняет простое сравнение байтов.
- Примечание к реализации:
- Все байты в
digestaпроверяются на равенство. Время вычисления зависит только от длиныdigesta. Оно не зависит от длиныdigestbили содержимогоdigestaиdigestb. - Параметры:
-
digesta- один из дайджестов для сравнения. -
digestb- другой дайджест для сравнения. - Возвращает:
- true, если дайджесты равны, иначе false.
reset
public void reset()
Сбрасывает дайджест для дальнейшего использования.
getAlgorithm
public final String getAlgorithm()
Возвращает строку, идентифицирующую алгоритм независимо от реализации. Название должно быть стандартным именем Java Security (например, "SHA-256"). См. раздел MessageDigest в документации Java Cryptography Architecture Standard Algorithm Name для получения информации о стандартных именах алгоритмов.
- Возвращает:
- имя алгоритма
getDigestLength
public final int getDigestLength()
Возвращает длину дайджеста в байтах или 0, если эта операция не поддерживается поставщиком, и реализация не клонируема.
- Возвращает:
- длина дайджеста в байтах, или 0, если эта операция не поддерживается поставщиком и реализация не клонируема.
- С тех пор:
- 1.2
clone
public Object clone()
throws CloneNotSupportedException Возвращает клон, если реализация клонируема.
- Переопределяет:
-
cloneв классеMessageDigestSpi - Возвращает:
- клон, если реализация клонируема.
- Исключения:
-
CloneNotSupportedException- если это вызывается на реализации, которая не поддерживаетCloneable. - См. также:
Cloneable
© 1993, 2020, 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.