Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

Алгоритм шифрования паролей на суд народа :о)   Найти похожие ветки 

 
Prohodil Mimo ©   (2004-08-31 11:49) [0]

593, 398199 - это мой пасс в зашифрованном виде используемый в моих прогах... две цыфры получаю из одного слова через две функции,
каждая функция даёт свою цифру. При вводе пароля должны совпасть обе цифры.
Как то лет 5 назад придумал алгоритм, на идеальность не надеюсь, но интересно... за сколько времени его разгадать можно?

Function TPass_Form.GetPasSum(S:String):Integer;
Var
  I:Integer;
  Sm:Integer;
Begin
Sm:=0;
For I:=1 to Length(S) do
  Sm:=Sm+Ord(S[I]);
GetPasSum:=Sm;
End;

Function TPass_Form.GetPasRSum(S:String):Real;
Var
  I:Integer;
  Sm:Real;
Begin
Sm:=0;
For I:=1 to Trunc(Length(S)/2) do
Begin
  If I<Length(S) then
     Sm:=Sm+(Ord(S[I])/Ord(S[I+1]))
  Else
     Sm:=Sm+(Ord(S[I])/Ord(S[1]));
End;
GetPasRSum:=Sm;
End;


Что скажете? Сильно ругать будете?
Изначально писалось под ТР7, так что не ругайте за неиспользование Result.


 
pasha_golub ©   (2004-08-31 11:55) [1]

     Sm:=Sm+(Ord(S[I])/Ord(S[I+1]))
 Else
    Sm:=Sm+(Ord(S[I])/Ord(S[1]));


А если будет деление на ноль?


 
Delirium ©   (2004-08-31 11:56) [2]

Очередной велосипед, см. ниже всё уже написано
http://delphibase.endimus.com/?action=viewtopic&topic=strcode
http://delphibase.endimus.com/?action=viewtopic&topic=mathcode


 
Prohodil Mimo ©   (2004-08-31 11:59) [3]

[1] pasha_golub символ #0 в строке?


 
Prohodil Mimo ©   (2004-08-31 12:03) [4]

[2] Delirium, зато я над этим сам думал, а не тупо скопировал чужое.


 
VMcL ©   (2004-08-31 12:07) [5]

>>Prohodil Mimo ©  (31.08.04 12:03) [4]

До xor"а я лет в надцать тоже сам додумался. Приятно, но толку мало :-)


 
Delirium ©   (2004-08-31 12:10) [6]

"сам думал" - это хорошо, но каков результат? - Никому, кроме тебя, не интересный алгоритм, мало эффективный и наверняка слабый. Никакой математической базы, алгоритм вычисления хеша дающий при близких исходных - близкий, а в ряде случев - идентичный результат. CRC32 эффективнее и надёжнее во 100 крат, не говоря о серьёзных вещах типа пресловутого MD5.


 
pasha_golub ©   (2004-08-31 12:11) [7]

Prohodil Mimo ©   (31.08.04 11:59) [3]
А почему бы и нет. Например, входная строка - это бинарный файл. Может быть? Может.


 
Мюмзик в мове   (2004-08-31 12:12) [8]

с потерей шифровать замечательно, а вот когда нужно пароль на сторону передавать, такой способ уже не спасет


 
Prohodil Mimo ©   (2004-08-31 12:12) [9]

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


 
Prohodil Mimo ©   (2004-08-31 12:17) [10]

[7] pasha_golub

> А почему бы и нет. Например, входная строка - это бинарный
> файл. Может быть? Может.


не может, т.к. использую для ввода пароля с клавы.

[6] Delirium

> мало эффективный и наверняка слабый


вот и хочу узнать наскока.


 
Delirium ©   (2004-08-31 12:22) [11]

"вот и хочу узнать наскока" - в цикле запусти случайную генерацию строк, и получи документ типа

Слово:             Мой Хеш:            CRC32:
фывпыпыпывф        123  234.4          4572357
сцусцусцусм        5432 46456.2345     235645
...

Анализируй скажем на 1 000 000 строк, думаю, вполе достаточно чтобы какую-то статистику получить.


 
Delirium ©   (2004-08-31 12:27) [12]

Если у тебя повторений будет на много меньше -  чем у CRC32 - молодец. Хотя, не очень корректный тест - у тебя размер хеша Integer + Real = 32 + 48 = 80 бит, а у CRC32 всего 32 бита.


 
DeadMeat ©   (2004-08-31 12:35) [13]

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

Учитывая, что английский текст располагается в ASCII таблице располагается до 127, то можно последний, неиспользуемый бит использовать. Другими словами, в тексте HELLO WORLD у всех букв последний бит 0. Поэтому делаем так:
берем код первой буквы (H) и добавляем в его последний бит, первый бит следующей буквы. При этом сдвигаем все биты второй буквы на один влево, т.е. убираем этот бит. Дальше берем код второй буквы (Е), и в уже освободившиеся два последних бита добавляем два первых бита третьей буквы, сдвигаем код третьей буквы, на два бита влево. Берем третью букву (L) и добавляем в ее последние три бита, три первых бита следующей буквы. Сдвигаем и т.д...
До реализации руки не дошли, но она не сложная...

Как оцените?


 
Prohodil Mimo ©   (2004-08-31 12:38) [14]

[13] DeadMeat, об этом я читал в какой то книжке по паскалю. только там был вариант уменьшение размера занимаепой памяти под цифры.


 
DeadMeat ©   (2004-08-31 12:40) [15]

Вот блин...
А я та думал, что новое чего то изобрел...


 
Алхимик ©   (2004-08-31 14:46) [16]

"Всё уже украдено до нас" (с) Операция Ы.


 
vuk ©   (2004-08-31 14:59) [17]

Кстати, в той же базе есть еще один известный алгоритм вычисления хеша. Он достаточно простой - на каждом шаге делается xor + циклический сдвиг регистра. Реализация на асме.
http://delphibase.endimus.com/?action=viewfunc&topic=mathcalc&id=10092

Для шифрования этот хеш, наверное, не очень подходит, но для организации всяких хеш-таблиц - вполне.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.039 c
3-1093327698
first_may
2004-08-24 10:08
2004.09.19
Ошибки IB...


1-1094387863
pavelgr
2004-09-05 16:37
2004.09.19
tmemo


6-1089732673
banderas
2004-07-13 19:31
2004.09.19
idTCPServer &amp; idTCPClient Есть ли альтернатива readln ???


1-1094028596
Zhekson
2004-09-01 12:49
2004.09.19
как выдернуть имя файла из ShellListView


4-1091203693
delphiserg
2004-07-30 20:08
2004.09.19
Принтери





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский