Основы криптографии
Хэш-функции (SHA-256, MD5)
Хэш-функция — это алгоритм, который принимает произвольные данные и генерирует фиксированную строку (хэш).
Основные свойства хэша:
Детерминированность – одно и то же входное значение всегда даёт одинаковый результат.
Скорость – быстрый расчёт хэша.
Устойчивость к коллизиям – два разных входных значения не должны давать одинаковый хэш.
MD5 – устаревший алгоритм
Разработан в 1991 году Рональдом Ривестом.
Размер хэша: 128 бит (32 символа в шестнадцатеричном формате).
Уязвим для атак на коллизии – можно подобрать два разных входных значения с одинаковым хэшем.
Используется только для контрольных сумм (например, проверки целостности файлов).
Как работает MD5 под капотом?
Разделяет сообщение на блоки по 512 бит.
Добавляет бит 1 в конец данных, затем дополняет нулями до 448 бит.
Добавляет 64-битное представление длины исходного сообщения.
Применяет 4 раунда нелинейных преобразований (циклические сдвиги, XOR, сложение по модулю 2³²).
Получает 128-битный хэш.
Пример MD5 в Java
SHA-256
Разработан NSA в 1993 году как часть SHA-2.
Размер хэша: 256 бит (64 символа в шестнадцатеричном формате).
Безопасен на 2025 год, поскольку коллизии не найдены.
Используется в блокчейне, цифровых подписях, аутентификации пользователей.
Как работает SHA-256 под капотом?
Разбивает данные на 512-битные блоки.
Добавляет padding, как в MD5.
Инициализирует 8 переменных (A–H) с фиксированными значениями.
Выполняет 64 раунда преобразований, используя битовые сдвиги, XOR и сложение по модулю 2³².
Возвращает 256-битный (32-байтовый) хэш.
Пример SHA-256 в Java
Цифровые подписи
Цифровая подпись – это криптографическая технология, обеспечивающая:
Аутентификацию – доказывает, что данные создал именно этот отправитель.
Целостность – если данные изменятся, подпись станет недействительной.
Неотрекаемость – автор не может отрицать, что подписал документ.
Как работает цифровая подпись?
Отправитель хэширует данные (обычно SHA-256).
Этот хэш шифруется приватным ключом (RSA/ECDSA).
Подпись отправляется вместе с оригинальными данными.
Получатель проверяет подпись с помощью публичного ключа.
Пример цифровой подписи (RSA) в Java
#Java #Training #Medium #Crypto #Hash #MD5 #SHA_256
Хэш-функции (SHA-256, MD5)
Хэш-функция — это алгоритм, который принимает произвольные данные и генерирует фиксированную строку (хэш).
Основные свойства хэша:
Детерминированность – одно и то же входное значение всегда даёт одинаковый результат.
Скорость – быстрый расчёт хэша.
Устойчивость к коллизиям – два разных входных значения не должны давать одинаковый хэш.
MD5 – устаревший алгоритм
Разработан в 1991 году Рональдом Ривестом.
Размер хэша: 128 бит (32 символа в шестнадцатеричном формате).
Уязвим для атак на коллизии – можно подобрать два разных входных значения с одинаковым хэшем.
Используется только для контрольных сумм (например, проверки целостности файлов).
Как работает MD5 под капотом?
Разделяет сообщение на блоки по 512 бит.
Добавляет бит 1 в конец данных, затем дополняет нулями до 448 бит.
Добавляет 64-битное представление длины исходного сообщения.
Применяет 4 раунда нелинейных преобразований (циклические сдвиги, XOR, сложение по модулю 2³²).
Получает 128-битный хэш.
Пример MD5 в Java
import java.security.MessageDigest;
public class MD5Example {
public static void main(String[] args) throws Exception {
String input = "Hello, world!";
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hash = md.digest(input.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
System.out.println("MD5 Hash: " + hexString.toString());
}
}
SHA-256
Разработан NSA в 1993 году как часть SHA-2.
Размер хэша: 256 бит (64 символа в шестнадцатеричном формате).
Безопасен на 2025 год, поскольку коллизии не найдены.
Используется в блокчейне, цифровых подписях, аутентификации пользователей.
Как работает SHA-256 под капотом?
Разбивает данные на 512-битные блоки.
Добавляет padding, как в MD5.
Инициализирует 8 переменных (A–H) с фиксированными значениями.
Выполняет 64 раунда преобразований, используя битовые сдвиги, XOR и сложение по модулю 2³².
Возвращает 256-битный (32-байтовый) хэш.
Пример SHA-256 в Java
import java.security.MessageDigest;
public class SHA256Example {
public static void main(String[] args) throws Exception {
String input = "Hello, world!";
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte[] hash = sha.digest(input.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
System.out.println("SHA-256 Hash: " + hexString.toString());
}
}
Цифровые подписи
Цифровая подпись – это криптографическая технология, обеспечивающая:
Аутентификацию – доказывает, что данные создал именно этот отправитель.
Целостность – если данные изменятся, подпись станет недействительной.
Неотрекаемость – автор не может отрицать, что подписал документ.
Как работает цифровая подпись?
Отправитель хэширует данные (обычно SHA-256).
Этот хэш шифруется приватным ключом (RSA/ECDSA).
Подпись отправляется вместе с оригинальными данными.
Получатель проверяет подпись с помощью публичного ключа.
Пример цифровой подписи (RSA) в Java
import java.security.*;
public class DigitalSignatureExample {
public static void main(String[] args) throws Exception {
// Генерация ключей
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(pair.getPrivate());
String data = "Important message";
signature.update(data.getBytes());
byte[] signedData = signature.sign();
// Проверка подписи
signature.initVerify(pair.getPublic());
signature.update(data.getBytes());
boolean isValid = signature.verify(signedData);
System.out.println("Подпись действительна? " + isValid);
}
}
#Java #Training #Medium #Crypto #Hash #MD5 #SHA_256