Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import reedsolo
- def encode(text, n):
- rsc = reedsolo.RSCodec(n)
- encoded_bytes = rsc.encode(text)
- return encoded_bytes
- def decode(encoded_text, n, original_length=None):
- rsc = reedsolo.RSCodec(n)
- try:
- decoded_bytes = rsc.decode(encoded_text)
- # Обрезаем декодированные данные до оригинального размера
- if original_length:
- primer = decoded_bytes[0][-original_length:]
- print(primer.decode('utf-8'))
- return bytes(primer)
- return decoded_bytes[0]
- except reedsolo.ReedSolomonError:
- return None
- def split_text(text):
- length = len(text)
- part_length = length // 3
- part1 = text[:part_length]
- part2 = text[part_length:2 * part_length]
- part3 = text[2 * part_length:]
- return part1, part2, part3
- text = b'This is a sample text for testing Reed-Solomon codes.'
- part1, part2, part3 = split_text(text)
- print(part1)
- print(part2)
- print(part3)
- n = len(text)
- # Кодируем каждую часть
- encoded_part1 = encode(part1, n)
- encoded_part2 = encode(part2, n)
- encoded_part3 = encode(part3, n)
- encoded_part2_corrupted = encoded_part2[:10] + b'corrupted' + encoded_part2[10:]
- print(part2)
- print(encoded_part2)
- print(encoded_part2_corrupted)
- data_len = len(part1)+2
- recovered_part2 = decode(encoded_part2_corrupted, n, data_len)
- encoded_part1 = decode(encoded_part1, n)
- print(encoded_part1)
- if recovered_part2 is not None:
- print("Original Part 2:", part2)
- print("Recovered Part 2:", recovered_part2)
- else:
- print("Unable to recover Part 2.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement