Bu depo, özel bir 256 bit durum kullanan chain_hash_64 fonksiyonunu ve bu fonksiyonun üstüne kurulu yardımcı araçları içerir. Algoritma, girdinin her baytını XOR, toplama, çarpma ve rotl (bitsel sola döndürme) işlemleriyle karıştırır, ardından 32 baytlık bir hexadecimal çıktı üretir.
from hash import chain_hash_64
text = "Hello World"
digest = chain_hash_64(text)
print(f"Hash: {digest}")Depoda iki küçük CLI bulunuyor:
app.py: Konsola girilen metnin hash değerini üretir.file_hash.py: Belirtilen dosyanın hash değerini hesaplar.
Çalıştırmak için:
python app.py
python file_hash.pytext_chain.py, her metin girdisini bir önceki bloğun hash'i ile birbirine bağlayarak basit bir zincir dosyası (text_chain.hashing) tutar. Veriler özel binary formatta saklanır.
Zincir verileri JSON yerine özel bir binary formatta saklanır:
Header (13 byte):
- Magic:
HASHING(7 byte) - Versiyon: 1 (2 byte)
- Blok sayısı (4 byte)
Her Blok:
- Meta: index (4 byte), timestamp uzunluğu (2 byte), text uzunluğu (2 byte)
- Timestamp (değişken uzunluk, UTF-8)
- Text (değişken uzunluk, UTF-8)
- prev_hash (32 byte)
- hash (32 byte)
index: Sıra numarasıtimestamp: UTC ISO zaman damgasıtext: Saklanmak istenen metinprev_hash: Bir önceki bloğun hash değerihash: Bloğun kendi hash değeri (metin + metadata üzerinden hesaplanır)
python text_chain.py reset # Yeni genesis bloğu oluştur
python text_chain.py add "Merhaba dünya" # Zincire yeni metin ekle
python text_chain.py list # Zincirdeki blokları sırayla göster
python text_chain.py verify # Zincir bütünlüğünü kontrol etreset komutu zinciri sıfırlar, add zincirin sonuna yeni bir blok ekler, list özet bir çıktı verir, verify ise hash ve prev_hash alanlarını yeniden hesaplayarak zincirin bozulmadığını doğrular.
file.py modülü binary format işlemlerini sağlar:
from file import save_hashing_format, read_hashing_format
# Zinciri .hashing dosyasına kaydet
save_hashing_format(chain_data, "dosya.hashing")
# .hashing dosyasından zinciri oku
chain = read_hashing_format("dosya.hashing")