kryptografia/3/xor.py

32 lines
961 B
Python
Raw Permalink Normal View History

2024-11-18 00:14:03 +01:00
import gmpy2
from gmpy2 import mpz
def xor_custom(a, b):
"""
Wykonuje operację bitowego XOR na dwóch liczbach typu mpz reprezentujących bajty.
Args:
a (mpz): Pierwszy bajt (0-255) jako mpz.
b (mpz): Drugi bajt (0-255) jako mpz.
Returns:
mpz: Wynik operacji XOR (0-255) jako mpz.
"""
if not isinstance(a, mpz) or not isinstance(b, mpz):
raise TypeError("Oba argumenty muszą być typu mpz.")
result = mpz(0)
for i in range(8):
bit_a = (a >> i) & 1 # Pobiera i-ty bit z a
bit_b = (b >> i) & 1 # Pobiera i-ty bit z b
bit_result = bit_a ^ bit_b # XOR bitów
result |= (bit_result << i) # Ustawia wynikowy bit w odpowiedniej pozycji
return result
if __name__ == "__main__":
# Przykład użycia
a = gmpy2.mpz(0x57)
b = gmpy2.mpz(0x83)
wynik = xor_custom(a, b)
print(f"xor_custom({hex(int(a))}, {hex(int(b))}) = {hex(int(wynik))}")