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

Вниз

Алгоритм   Найти похожие ветки 

 
RealRascal   (2004-01-24 12:33) [0]

Нужно, чтоб выдавало такие строки

а
б
в
г
..
я
аа
аб
..
ая
ба
бб
..
..

Ну и так далее. Чета, млин, никак допедрить не могу.
Рекурсией ? Думаю, что нет.


 
Digitman   (2004-01-24 12:44) [1]

а вы их дустом не пробовали ?

(c)


 
SeZam   (2004-01-24 12:49) [2]

Ну это же перевод из, допустим десятичной системы в 33-ричную.
1-а,2-б..ю-32,я-33,аа-34 и.т.д.


 
SeZam   (2004-01-24 12:51) [3]

Ну это же перевод из, допустим десятичной системы в 33-ричную.
1-а,2-б..ю-32,я-33,аа-34 и.т.д.


 
SeZam   (2004-01-24 12:54) [4]

Ну это же перевод из, допустим десятичной системы в 33-ричную.
1-а,2-б..ю-32,я-33,аа-34 и.т.д.


 
RealRascal   (2004-01-24 12:55) [5]


> а вы их дустом не пробовали ?

?
что есть дуст?
кого? буквы?
?
мой могз и так слаб. И вы тут еще ребусами разговариваете. :))


 
RealRascal   (2004-01-24 12:57) [6]

SeZam (24.01.04 12:49) [2]
Можно еще раз а,то я не понял?
))
А есть процедуры перевода выражения из N-ричной системы измерения в М-ричную?


 
SeZam   (2004-01-24 13:09) [7]

Писал сам , но к сожалению сейчас не под рукой.


 
Akvilon   (2004-01-24 13:29) [8]

попробуй так :
var
alf: array[" ", "а", ... "я"] of char;
i, j: integer;
begin
for i := 1 to High(alf) do
for j := 0 to High(alf) do
Write(a[i], a[j]);
end.


 
RealRascal   (2004-01-24 13:36) [9]


> SeZam (24.01.04 13:09) [7]

Совсем забыл: я уже думал о таком варианте: Не, не потянет.
>Integer –2147483648..2147483647
Если перевести в 33-ричную систему это всего несколько буковок будет(точнее 4, integer ведь 4-х байтный). Надо до 256 букв.
Можно использовать Int64, и то –2^63..2^63–1 - это 64бита=8байт=8 букв.
Тут, имхо, нужен другой метод.


 
RealRascal   (2004-01-24 13:49) [10]


> Akvilon © (24.01.04 13:29) [8]

Пробовал вот так
var
alf: array["а" .. "я"] of char;
i, j: integer;
begin
for i := 1 to 31 do
for j := 0 to 31 do
memo1.Lines.Add(alf[chr(i)]+alf[chr(j)]);
end;

Билеберду выдает
да и вообще, не две буквы надо, надо чтоб до 256 было.


 
Akvilon   (2004-01-24 14:16) [11]

Тогда желательно бы поподробнее о проблеме: что есть и что надо чтоб было ?


 
Akvilon   (2004-01-24 14:16) [12]

Тогда желательно бы поподробнее о проблеме: что есть и что надо чтоб было ?


 
Думкин   (2004-01-24 14:26) [13]

> [10] RealRascal © (24.01.04 13:49)

Тебе бы поспать, перетрудился видимо.


 
RealRascal   (2004-01-24 14:44) [14]


> Думкин © (24.01.04 14:26) [13]

Наверно это следует читать как "наберут детей в морфлот, а молока не дают!"
:)))

2 Akvilon © (24.01.04 14:16)
Написал шифрующую прогу. Теперь пишу брутфорсер для того чтоб оценить стойкость шифра.
Таргет можно по-разному сказать.
1 Нужна процедура для получения текущей комбинации.
или
2 нужно перебрать все комбинации цифр и букв в искомом диапазоне
или
3 нужна функция которая возврашает следующую комбинацию на основе предыдущей
например getnext("кляяя") вернет "кмаааа".
Вроде просто кажется...а у меня толь заклинило чтоль, то ли мозг проложил колею и мысль менять не хочет... чета не придумывается нифига...


 
SergP   (2004-01-24 16:48) [15]


> RealRascal © (24.01.04 12:33)

> Ну и так далее. Чета, млин, никак допедрить не могу.
> Рекурсией ? Думаю, что нет.


Когда-то (правда давно) кто-то в основном задавал такой-же вопрос. Я от нефиг делать написал как это делать (правда потратил минут 20). Той ветки скорее всего давно уже не. На своей машине я навряд ли сохранил это. Но алгоритм простой получился (рекурсивный). Если найду то напишу. А еще раз думать что-то лень.


 
Palladin   (2004-01-24 17:53) [16]

еще проще и без рекурсии

type
TCHRNums=class
private
m_strSrcChars:string;
m_nSrcLen:byte;
m_nCurrent:int64;
function lcNumToChrs(p_nNum:int64):string;
function lcChrsToNum(const p_strChrs:string):int64;

procedure lcSetSrcChars(p_strChrs:string);
public
constructor Create;
property Chars:string read m_strSrcChars write lcSetSrcChars;

function Next(const p_strChrs:string):string; overload;
function Next:string; overload;
procedure GetRange(p_slInto:TStrings;p_nFrom,p_nCount:int64);
end;

constructor TCHRNums.Create;
begin
m_nSrcLen:=0;
m_strSrcChars:="";
end;

function TCHRNums.lcNumToChrs;
var
m:int64;
begin
result:="";
while p_nNum>m_nSrcLen do
begin
m:=p_nNum mod m_nSrcLen;
result:=m_strSrcChars[m+1]+result;
p_nNum:=p_nNum div m_nSrcLen;
end;
result:=m_strSrcChars[p_nNum]+result;
end;

function TCHRNums.lcChrsToNum;
var
i:integer;
begin
result:=0;
for i:=1 to Length(p_strChrs) do result:=result+(Pos(p_strChrs[i],m_strSrcChars)-1)*Trunc(exp(ln(m_nSrcLen)*i));
end;

procedure TCHRNums.lcSetSrcChars;
begin
if Length(p_strChrs)>256 then raise Exception.Create("А Вам не кажется что это слишком много? "+IntToStr(Length(p_strChrs)));
m_strSrcChars:=p_strChrs;
m_nSrcLen:=Length(m_strSrcChars);
m_nCurrent:=0;
end;

function TCHRNums.Next(const p_strChrs:string):string;
begin
result:=lcNumToChrs(lcChrsToNum(p_strChrs)+1);
end;

function TCHRNums.Next:string;
begin
result:=lcNumToChrs(m_nCurrent);
m_nCurrent:=m_nCurrent+1;
end;

procedure TCHRNums.GetRange;
var
i:int64;
begin
i:=p_nFrom;
while i<>p_nFrom+p_nCount do
begin
p_slInto.Add(lcNumToChrs(i));
i:=i+1;
end;
end;


 
RealRascal   (2004-01-24 19:34) [17]


> Palladin © (24.01.04 17:53) [16]

Хорошая идея оформить в виде отдельного класса. Респект.
Только вот не работает что-то. Ну то есть работает только не в том направлении. Я пишу примерно так:
Numers:= TCHRTONUM.Create;
Numers.chars:="абв";
Numers.GetRange(Form1.memo1.lines,1,50);
что я при этом получаю? 50 первых комбинаций этих трех букв?
при беглом осмотре примерно вот так предствил принцип работы:
берем строку, считая ее выражением в такой-то системе исчисления переводим в 10-чную, прибавляем еденичку, и переводим обратно. так?


 
Palladin   (2004-01-24 20:15) [18]

да так
только 50 комбинаций из трех букв несуществует :)


 
Думкин   (2004-01-24 20:41) [19]

Если простот последовательно:
const
max = 31;
var
Form1: TForm1;
alpha : array[0..max] of widechar;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
for i:=Low(alpha) to High(alpha) do alpha[i] := widechar(1072+i)
end;

function nnext(aa : widestring ) : widestring;
var i : integer;
a : boolean;
begin
Result := aa;
a := true;
i := length(Result);
while (a)and(i>0) do begin
if Result[i]= alpha[max] then begin
Result[i] := alpha[0];
dec(i);
if i=0 then Result := alpha[0]+Result
end
else begin
a := false;
Result[i]:= widechar(Succ(Result[i]))
end
end
end;

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
aa : widestring;
begin
aa := alpha[0];
for i:=1 to 5000 do
begin
aa := nnext(aa);
memo.Lines.Add(aa);
end;
end;


 
RealRascal   (2004-01-24 21:44) [20]


> Palladin © (24.01.04 20:15) [18]
> да так
> только 50 комбинаций из трех букв несуществует :)

Еще как существует
ааа
ааб
аав
аба
абб
абв
баа
баб
бав
бба
ббб
ббв
бва
бвб
бвв
ваа
ваб
вав
вба
вбв
вва
ввб
ввв
аааа
аааб
...
и так далее. Их вообще бесконечное множество - о длине строки нет ни слова.


 
Думкин   (2004-01-24 21:49) [21]

> [20] RealRascal © (24.01.04 21:44)

Нет, он прав - из трех букв не существует. А вот слов с использованием алфавита из трех букв - да.


 
RealRascal   (2004-01-24 21:53) [22]


> Думкин © (24.01.04 21:49) [21]

да, действительно, вопрос в терминологии, а в этому я необучен.
Кстати, предыдущий кусман кода - не работает. Идею Вашу понял, вроде должно работать. Сижу разбираюсь...


 
Думкин   (2004-01-24 21:55) [23]

> [22] RealRascal © (24.01.04 21:53)

Как это не работает? У меня работает. Форма с двумя компонентами.
Я, конечно, на Д7 сделал - может тут собака порылась?
Какую ошибку дает?


 
RealRascal   (2004-01-24 22:05) [24]


> Какую ошибку дает?

Ощибок _none_
может я неправильно пишу
s:="например"
while true do
begin
memo.lines.add(s);
s:=nnext(s);
end;

меняет только последнюю букву.
Там в той функции условие if i=0 не выполняется никогда...
d5.


 
nikkie   (2004-01-24 22:21) [25]

>Написал шифрующую прогу.
не обижайся, но если ты не можешь написать алгоритм перебора слов, то тебе рановато придумывать свои шифры.

>Теперь пишу брутфорсер для того чтоб оценить стойкость шифра.
это как же брут форсом можно оценить стойкость шифра?


 
Думкин   (2004-01-24 22:21) [26]

> [24] RealRascal © (24.01.04 22:05)

Как никогда? а dec(i);?
Указанное слово - у меня меняет - все.


 
Palladin   (2004-01-24 22:38) [27]


> RealRascal ©

да есть неточность в алгоритме... уж найди сам...


 
RealRascal   (2004-01-24 22:48) [28]


> nikkie © (24.01.04 22:21) [25]

> не обижайся
А чего тут обидного?

> рановато
А как связаны способность придумать хэш функцию и способность написать подобный алгоритм?

> Как никогда? а dec(i);?

:)))
и это тоже никогда не выполняется...оказывается...
нашел я причину. вместо например у меня стояло "fgxhfdgh". А когда сюда копировал "например" поставил, чтобы понятнее было...
А сейчас повнимательнее посмотрел...функция-то только для маленьких русских буковок...
Когда причину искал следил только за условием i=0...
Виноват ...(опустив глаза в пол)


 
nikkie   (2004-01-24 22:58) [29]

>А чего тут обидного?
так просто. старался, чтобы ты не воспринял как наезд ;)

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

да, кстати, а причем здесь хеш? до сих пор про него речи не было...


 
RealRascal   (2004-01-24 23:08) [30]

опять я наверно в терминах что-то перепутал...

Функцию шума я имел ввиду. Которая накладывается на файл.
А алгоритм свой. Для симметричного шифрования алгоритм вообще придумать легко. Это для несимметричного голову сломать можно.


 
SergP   (2004-01-25 11:08) [31]

Вот. Нашел. Оказывается я ее все-таки оставил у себя на винте..

procedure TForm1.perebor(const s,c:string; const n:byte);
var
i:byte;
begin
if length(s)<n
then for i := 1 to length(c) do perebor(s + c[i], c, n)
else memo1.lines.add(s); // brutforce (s);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
z:byte;
begin
for z := 1 to 3 do perebor("", "ABCD", z);
end;

В данном примере нажимаем на кнопку и MEMO заполняется всеми вариантами из указаных символов (в данном случае "ABCD") с длиной от 1 до 3 символов.
ИМХО очень просто получилось по размеру текста исходника. Насчет эффективности - не знаю, это мастерам виднее...


 
SergP   (2004-01-26 00:38) [32]


> Palladin © (24.01.04 17:53) [16]
> еще проще и без рекурсии


Ну не знаю насколько она проще. По крайней мере мой вариант проще с точки зрения размера и читабельности исходника. Насчет всего остального - не знаю. Но ИМХО для брутфорсинга и такое [31] неплохо подойдет.


> SeZam (24.01.04 12:51) [3]
> Ну это же перевод из, допустим десятичной системы в 33-ричную.
> 1-а,2-б..ю-32,я-33,аа-34 и.т.д.


Зачем так извращаться? А представь себе что нужна не 33-ричная система (например набор используемых символов больше или меньше). Так получится целая офигенная прога чтобы предусмотреть все...



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

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

Наверх




Память: 0.53 MB
Время: 0.01 c
7-39119
agentru
2003-11-27 22:42
2004.02.13
Блокировка клавы???


14-39059
Думкин
2004-01-25 05:35
2004.02.13
С днем рождения! 25 января.


1-38769
DDA
2004-02-03 00:26
2004.02.13
Hint in ListBox


3-38718
Vi0let
2004-01-22 07:13
2004.02.13
Почему везде в примерах по локалкам используют Paradox?


3-38668
Крутыш
2004-01-25 11:16
2004.02.13
Вопрос по запросу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский