Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Шифрование/расшифрование двух целых чисел

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ant
Отправлено: 15 Июля, 2013 - 04:55:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 133
Дата рег-ции: Янв. 2011  
Откуда: Украина, Крым


Помог: 0 раз(а)




Здравствуйте.
Есть 2 целых положительных числа (от 1 до 300 000, возможно больше). Нужно их зашифровать, затем расшифровать обратно. Сложность шифрования - подойдет средняя, данные не секретные. =)
Есть какие-нибудь советы?
 
 Top
Denkill
Отправлено: 15 Июля, 2013 - 07:09:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 330
Дата рег-ции: Янв. 2013  
Откуда: Барнаул


Помог: 7 раз(а)






-----
Хо-Хо-Хо
 
 Top
VestCoastman
Отправлено: 15 Июля, 2013 - 11:40:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




base64 + свои наработки
Например
Число: 874 ($num = 874;)
Слогаемое: 7 ($x = 7;)
Множитель: 3 ($y = 3;)
Элементарный алгоритм: $result_enc = base64_encode(($num + $x) * $y);

Обратное действие: $result_dec = base64_decode($result_enc) / $y - $x;

(Отредактировано автором: 15 Июля, 2013 - 12:35:22)

 
 Top
ant
Отправлено: 15 Июля, 2013 - 12:25:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 133
Дата рег-ции: Янв. 2011  
Откуда: Украина, Крым


Помог: 0 раз(а)




А можно в качестве примера какие именно наработки? Человек просто возьмет эту строку, base64_decode() и получит эти два числа. То есть это шифрование не средней сложности, а самой простой получается... Хотелось хотя бы немного усложнить.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июля, 2013 - 12:47:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Я такое использую:
Спойлер (Отобразить)


json'ка не только для хранения структуры, но и для валидации неверного ключа шифрования - строка-то послушно расшифруется, но полезного ничего там не будет.
(Добавление)
Denkill, мы ещё с первого раза поняли, что вы за base64. Не надо повторять уже третий раз.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 15 Июля, 2013 - 14:37:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




ant пишет:
Сложность шифрования - подойдет средняя, данные не секретные

Например, сходу:
PHP:
скопировать код в буфер обмена
  1. class Crypt_Simple
  2. {
  3.    const ENCRYPTION_KEY = '6hT4sw4GK#';
  4.    
  5.    public static function encrypt($mData)
  6.    {
  7.       return join('', array_map(['Crypt_Simple', '_crypt'], str_split(serialize($mData), strlen(self::ENCRYPTION_KEY))));
  8.    }
  9.  
  10.    public static function decrypt($sData)
  11.    {
  12.       if(!is_string($sData) ||
  13.          !$sData = @unserialize(join('',array_map(['Crypt_Simple', '_crypt'], str_split($sData, strlen(self::ENCRYPTION_KEY))))))
  14.       {
  15.          throw new Exception('Given data could not be decrypted');
  16.       }
  17.       return $sData;
  18.    }
  19.  
  20.    protected static function _crypt($sData)
  21.    {
  22.       return $sData ^ self::ENCRYPTION_KEY;
  23.    }
  24.  
  25. }
  26.  
  27. $rgData = ['test string longer that encryption key', 6743, -1.6E5*pi()];
  28. $rgData = array_map(['Crypt_Simple', 'encrypt'], $rgData);
  29.  
  30. var_dump($rgData);
  31. $rgData = array_map(['Crypt_Simple', 'decrypt'], $rgData);
  32. var_dump($rgData);

Ключ, разумеется, придётся хранить и в передатчике, и в приёмнике. В теории, если длина ключа сопоставима с длиной данных и считается, что ключ обеим сторонам был известен заранее (то есть не передавался, и, значит, не мог быть перехвачен), то данный алгоритм абсолютно криптостоек (иными словами, сложность взлома ключа сопоставима со сложностью взлома собственно самих данных).
Ну и, разумеется, если у атакующего есть возможность перехвата сообщений, то такой алгоритм не имеет смысла использовать несколько раз(если перехватить хотя бы два сообщения, зашифрованные одним ключом, то они оба будут взломаны) - он предназначен для однократной передачи данных.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB