Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added __pycache__/sha1_hash.cpython-313.pyc
Binary file not shown.
193 changes: 193 additions & 0 deletions examples.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Примеры использования функции calculate_sha1_hash
"""

from sha1_hash import calculate_sha1_hash, calculate_sha1_from_file
import os


def basic_examples():
"""Базовые примеры использования функции SHA1 хеширования"""
print("=== БАЗОВЫЕ ПРИМЕРЫ ===\n")

# Простые строки
examples = [
"Hello World",
"Python SHA1",
"123456",
"test@example.com",
"" # Пустая строка
]

for example in examples:
hash_value = calculate_sha1_hash(example)
print(f"Строка: '{example}'")
print(f"SHA1: {hash_value}")
print()


def unicode_examples():
"""Примеры с Unicode символами"""
print("=== ПРИМЕРЫ С UNICODE ===\n")

unicode_examples = [
"Привет, мир! 🌍",
"こんにちは世界",
"مرحبا بالعالم",
"🚀 Python 🐍",
"Тест с эмодзи 😊"
]

for example in unicode_examples:
hash_value = calculate_sha1_hash(example)
print(f"Строка: '{example}'")
print(f"SHA1: {hash_value}")
print()


def encoding_examples():
"""Примеры с различными кодировками"""
print("=== ПРИМЕРЫ С РАЗНЫМИ КОДИРОВКАМИ ===\n")

test_string = "Тестовая строка"
encodings = ['utf-8', 'cp1251', 'latin1']

for encoding in encodings:
try:
hash_value = calculate_sha1_hash(test_string, encoding)
print(f"Строка: '{test_string}' (кодировка: {encoding})")
print(f"SHA1: {hash_value}")
print()
except UnicodeEncodeError as e:
print(f"Ошибка кодировки {encoding}: {e.reason}")
print()


def comparison_example():
"""Пример сравнения хешей одинаковых строк"""
print("=== СРАВНЕНИЕ ХЕШЕЙ ===\n")

string1 = "Одинаковая строка"
string2 = "Одинаковая строка"
string3 = "Другая строка"

hash1 = calculate_sha1_hash(string1)
hash2 = calculate_sha1_hash(string2)
hash3 = calculate_sha1_hash(string3)

print(f"Строка 1: '{string1}'")
print(f"SHA1 1: {hash1}")
print()

print(f"Строка 2: '{string2}'")
print(f"SHA1 2: {hash2}")
print()

print(f"Строка 3: '{string3}'")
print(f"SHA1 3: {hash3}")
print()

print(f"Хеши строк 1 и 2 одинаковые: {hash1 == hash2}")
print(f"Хеши строк 1 и 3 одинаковые: {hash1 == hash3}")
print()


def file_hash_example():
"""Пример хеширования файла"""
print("=== ХЕШИРОВАНИЕ ФАЙЛА ===\n")

# Создаем тестовый файл
test_file = "/workspace/test_file.txt"
test_content = "Это содержимое тестового файла для демонстрации SHA1 хеширования."

try:
# Записываем содержимое в файл
with open(test_file, 'w', encoding='utf-8') as f:
f.write(test_content)

# Вычисляем хеш строки
string_hash = calculate_sha1_hash(test_content)

# Вычисляем хеш файла
file_hash = calculate_sha1_from_file(test_file)

print(f"Содержимое: '{test_content}'")
print(f"SHA1 строки: {string_hash}")
print(f"SHA1 файла: {file_hash}")
print(f"Хеши совпадают: {string_hash == file_hash}")

# Удаляем тестовый файл
os.remove(test_file)

except Exception as e:
print(f"Ошибка при работе с файлом: {e}")

print()


def practical_use_cases():
"""Практические примеры использования"""
print("=== ПРАКТИЧЕСКИЕ ПРИМЕРЫ ===\n")

# 1. Проверка целостности данных
print("1. Проверка целостности данных:")
original_data = "Важные данные для проверки"
original_hash = calculate_sha1_hash(original_data)

# Имитируем получение данных
received_data = "Важные данные для проверки" # Данные не изменились
received_hash = calculate_sha1_hash(received_data)

print(f" Оригинальные данные: '{original_data}'")
print(f" Оригинальный хеш: {original_hash}")
print(f" Полученные данные: '{received_data}'")
print(f" Полученный хеш: {received_hash}")
print(f" Данные целые: {original_hash == received_hash}")
print()

# 2. Создание уникальных идентификаторов
print("2. Создание уникальных идентификаторов:")
user_email = "user@example.com"
timestamp = "2023-10-20T10:30:00Z"
unique_id = calculate_sha1_hash(f"{user_email}:{timestamp}")

print(f" Email + время: '{user_email}:{timestamp}'")
print(f" Уникальный ID: {unique_id}")
print()

# 3. Хеширование паролей (НЕ рекомендуется для реальных паролей!)
print("3. Простое хеширование (только для демонстрации!):")
password = "my_secret_password"
password_hash = calculate_sha1_hash(password)

print(f" Пароль: '{password}'")
print(f" SHA1 хеш: {password_hash}")
print(" ВНИМАНИЕ: Для реальных паролей используйте bcrypt, scrypt или Argon2!")
print()


if __name__ == "__main__":
print("🔐 ДЕМОНСТРАЦИЯ SHA1 ХЕШИРОВАНИЯ В PYTHON\n")
print("=" * 60)

basic_examples()
print("=" * 60)

unicode_examples()
print("=" * 60)

encoding_examples()
print("=" * 60)

comparison_example()
print("=" * 60)

file_hash_example()
print("=" * 60)

practical_use_cases()
print("=" * 60)

print("\n✅ Все примеры выполнены успешно!")
98 changes: 98 additions & 0 deletions sha1_hash.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Модуль для вычисления SHA1 хеша из строки
"""

import hashlib


def calculate_sha1_hash(input_string: str, encoding: str = 'utf-8') -> str:
"""
Вычисляет SHA1 хеш из входной строки.

Args:
input_string (str): Входная строка для хеширования
encoding (str): Кодировка для преобразования строки в байты (по умолчанию 'utf-8')

Returns:
str: SHA1 хеш в шестнадцатеричном формате

Raises:
TypeError: Если input_string не является строкой
UnicodeEncodeError: Если строка не может быть закодирована с указанной кодировкой
"""
if not isinstance(input_string, str):
raise TypeError("Входной параметр должен быть строкой")

try:
# Преобразуем строку в байты с указанной кодировкой
string_bytes = input_string.encode(encoding)

# Создаем объект SHA1 хеша
sha1_hash = hashlib.sha1()

# Обновляем хеш с байтами строки
sha1_hash.update(string_bytes)

# Возвращаем хеш в шестнадцатеричном формате
return sha1_hash.hexdigest()

except UnicodeEncodeError as e:
raise UnicodeEncodeError(
e.encoding, e.object, e.start, e.end,
f"Не удалось закодировать строку с кодировкой {encoding}: {e.reason}"
)


def calculate_sha1_from_file(file_path: str) -> str:
"""
Вычисляет SHA1 хеш содержимого файла.

Args:
file_path (str): Путь к файлу

Returns:
str: SHA1 хеш содержимого файла в шестнадцатеричном формате

Raises:
FileNotFoundError: Если файл не найден
IOError: При ошибке чтения файла
"""
try:
sha1_hash = hashlib.sha1()

with open(file_path, 'rb') as file:
# Читаем файл блоками для эффективности с большими файлами
for chunk in iter(lambda: file.read(4096), b""):
sha1_hash.update(chunk)

return sha1_hash.hexdigest()

except FileNotFoundError:
raise FileNotFoundError(f"Файл не найден: {file_path}")
except IOError as e:
raise IOError(f"Ошибка при чтении файла {file_path}: {e}")


if __name__ == "__main__":
# Примеры использования
test_strings = [
"Hello, World!",
"Привет, мир!",
"123456789",
"",
"The quick brown fox jumps over the lazy dog"
]

print("=== Примеры вычисления SHA1 хеша ===\n")

for test_string in test_strings:
try:
hash_result = calculate_sha1_hash(test_string)
print(f"Строка: '{test_string}'")
print(f"SHA1: {hash_result}")
print("-" * 50)
except Exception as e:
print(f"Ошибка при обработке строки '{test_string}': {e}")
print("-" * 50)
Loading