Ответ
Хеш-сумма (хеш) — это результат работы криптографической хеш-функции, преобразующей произвольный массив данных (строку, файл) в строку фиксированной длины (последовательность символов).
Основные свойства:
- Детерминированность: Одинаковые входные данные всегда дают одинаковую хеш-сумму.
- Фиксированный размер: Выходная строма имеет постоянную длину (например, MD5 — 32 hex-символа, SHA-256 — 64).
- Быстрота вычисления.
- Эффект лавины: Малейшее изменение входных данных (1 бит) полностью меняет хеш.
- Необратимость (стойкость к восстановлению): По хешу практически невозможно восстановить исходные данные.
- Устойчивость к коллизиям: Крайне мала вероятность, что разным данным соответствует одинаковый хеш.
Применение:
- Проверка целостности данных (скачанных файлов).
- Хеширование паролей в базах данных.
- Построение хеш-таблиц.
- Цифровые подписи.
Пример вычисления SHA-256 в Java:
import java.security.MessageDigest;
import java.math.BigInteger;
public class HashExample {
public static String calculateSHA256(String input) throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hashBytes = md.digest(input.getBytes("UTF-8"));
// Конвертируем байты в hex-строку
BigInteger number = new BigInteger(1, hashBytes);
StringBuilder hexString = new StringBuilder(number.toString(16));
// Дополняем нулями слева
while (hexString.length() < 64) {
hexString.insert(0, '0');
}
return hexString.toString();
}
public static void main(String[] args) throws Exception {
String data = "Hello, World!";
String hash = calculateSHA256(data);
System.out.println(hash);
// dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
}
}