Форум: "Потрепаться";
Текущий архив: 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