Advertisement
Falexom

Untitled

Mar 9th, 2024
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. import reedsolo
  2.  
  3.  
  4. def encode(text, n):
  5. rsc = reedsolo.RSCodec(n)
  6. encoded_bytes = rsc.encode(text)
  7. return encoded_bytes
  8.  
  9.  
  10. def decode(encoded_text, n, original_length=None):
  11. rsc = reedsolo.RSCodec(n)
  12. try:
  13. decoded_bytes = rsc.decode(encoded_text)
  14. # Обрезаем декодированные данные до оригинального размера
  15. if original_length:
  16. primer = decoded_bytes[0][-original_length:]
  17. print(primer.decode('utf-8'))
  18. return bytes(primer)
  19. return decoded_bytes[0]
  20. except reedsolo.ReedSolomonError:
  21. return None
  22.  
  23.  
  24. def split_text(text):
  25. length = len(text)
  26. part_length = length // 3
  27. part1 = text[:part_length]
  28. part2 = text[part_length:2 * part_length]
  29. part3 = text[2 * part_length:]
  30. return part1, part2, part3
  31.  
  32.  
  33. text = b'This is a sample text for testing Reed-Solomon codes.'
  34.  
  35. part1, part2, part3 = split_text(text)
  36. print(part1)
  37. print(part2)
  38. print(part3)
  39. n = len(text)
  40. # Кодируем каждую часть
  41. encoded_part1 = encode(part1, n)
  42. encoded_part2 = encode(part2, n)
  43. encoded_part3 = encode(part3, n)
  44.  
  45. encoded_part2_corrupted = encoded_part2[:10] + b'corrupted' + encoded_part2[10:]
  46. print(part2)
  47. print(encoded_part2)
  48. print(encoded_part2_corrupted)
  49. data_len = len(part1)+2
  50. recovered_part2 = decode(encoded_part2_corrupted, n, data_len)
  51. encoded_part1 = decode(encoded_part1, n)
  52. print(encoded_part1)
  53. if recovered_part2 is not None:
  54. print("Original Part 2:", part2)
  55. print("Recovered Part 2:", recovered_part2)
  56. else:
  57. print("Unable to recover Part 2.")
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement