Шифруемся =)

1078
Ребят, привет smile Всегда хотел написать что нибудь связанное с шифрованием, не слишком сложное, но достаточное что бы потешить свое самолюбие smile

Самым простым я посчитал алгоритм многоалфавитной подстановки, смысл в том что каждый символ заменяется своим кодом в зависимости от таблицы, для расшифровки нужна собственно оригинальная таблица и ключ. Алгоритм уязвим для длинных текстов, об этом вы можете почитать в википедии =))



Класс для работы:

Код PHP:
  1.  
  2.  
  3. class crypt{
  4.  
  5. private static $instance;
  6.  
  7. public $chars = '|abcdefghigklmnopqrstuvwxyz0123456789.ABCDEFGHIGKLMNOPQRSTUVWXYZ ';
  8. public $separator = '_';
  9. public $code_chars = 8;
  10.  
  11. public static function getInstance(){
  12. if (self::$instance === null) {
  13. self::$instance = new self;
  14. }
  15. return self::$instance;
  16. }
  17.  
  18. public function __construct(){
  19. return true;
  20. }
  21.  
  22. // создание короткой строки символов
  23. public function createChars($data){
  24. $ar_chars = str_split($data);
  25. foreach($ar_chars as $char){
  26. $ar_chars_temp[$char] = $char;
  27. }
  28. $this->chars = implode('', $ar_chars_temp);
  29. return $this->chars;
  30. }
  31.  
  32. // Создание ключа для шифрования
  33. public function getKey(){
  34. // последовательность симвовлов
  35. $chars = $this->chars;
  36. //колличество символов в коде
  37. $code_chars = $this->code_chars;
  38. // разделитель
  39. $separator = $this->separator;
  40. // массив ключа шифра
  41. $ar_key = array();
  42. $n = 0;
  43. while($n < strlen($chars)){
  44. // гененирруем код
  45. $x = $this->getCode($chars, $code_chars);
  46. // проверяем на совпадение в том числе и с сепаратором
  47. while (in_array($x, $ar_key) || strpos($x, $separator) !== false){
  48. $x = $this->getCode($chars, $code_chars);
  49. echo $x . '<hr />';
  50. }
  51. // добавляем в массив
  52. $ar_key[$n] = $x;
  53. $n = $n + 1;
  54. }
  55. $key = implode($separator, $ar_key);
  56. return base64_encode($key);
  57. }
  58.  
  59. // функция генерации кода для символа
  60. private function getCode($chars, $code_chars){
  61. $n = 0;
  62. $x = '';
  63. while($n < $code_chars){
  64. $x = $x . substr($chars, rand(0, strlen($chars)-1), 1);
  65. $n = $n + 1;
  66. }
  67. return $x;
  68. }
  69.  
  70. public function encode($data, $key){
  71. // строка символов
  72. $chars = $this->chars;
  73. // разделитель
  74. $separator = $this->separator;
  75. // получаем массив ключа
  76. $key = base64_decode($key);
  77. $ar_key = explode($separator, $key);
  78. // массив символов
  79. $ar_chars = str_split($chars);
  80. // массив ключа для шифровки
  81. $ar_key_sum = array();
  82. //собираем массив
  83. foreach ($ar_chars as $key=>$value){
  84. $ar_key_sum[$value] = $ar_key[$key];
  85. }
  86. // разбиваем строку на символы
  87. $ar_data_chars = str_split($data);
  88. // шифрованный массив
  89. $ar_code = array();
  90. foreach($ar_data_chars as $char){
  91. $ar_code[] = $ar_key_sum[$char];
  92. }
  93. // собираем в строку
  94. $code = implode($separator, $ar_code);
  95. // кодируем и выводим
  96. return base64_encode($code);
  97. }
  98.  
  99. public function decode($data, $key){
  100. // строка символов
  101. $chars = $this->chars;
  102. // разделитель
  103. $separator = $this->separator;
  104. // получаем массив ключа
  105. $key = base64_decode($key);
  106. $ar_key = explode($separator, $key);
  107. // массив символов
  108. $ar_chars = str_split($chars);
  109. // получаем массив зашифрованной строки
  110. $data = base64_decode($data);
  111. $ar_data = explode($separator, $data);
  112. // собираем масив для расшифровки
  113. $decode_key = array();
  114. foreach($ar_key as $k => $v){
  115. $decode_key[$v] = $ar_chars[$k];
  116. }
  117. // собираем декодированную строку
  118. $data = '';
  119. foreach($ar_data as $value){
  120. $data = $data . $decode_key[$value];
  121. }
  122. return $data;
  123. }
  124.  
  125. }
  126.  
  127.  
Можно создать свою уникальную таблицу и сгенерировать уникальный ключ. Генерация ключа каждый раз происходит рандомно =)

файл класса можно скачать из моего профиля

Это конечно не формат инстанта, просто хотел поделиться.
Защищаем учетную запись администратора.
Комментарии (0)

Нет комментариев. Ваш будет первым!