Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > как преобразовать строку в число


Автор: DIMONSOFT 29.7.2005, 21:35
Существует ли алгоритм шифрования чтобы преобразовать строку в число
(привет=156548465484) smile

Автор: Quadr0 29.7.2005, 21:55
...

Автор: p0s0l 29.7.2005, 21:58
DIMONSOFT, а расшифровывать обратно нужно будет ?


Автор: DIMONSOFT 29.7.2005, 22:06
Цитата(p0s0l @ 29.7.2005, 21:58)
а расшифровывать обратно нужно будет

Нужно. smile

Quadr0
А расшифровка как?

Автор: Петрович 29.7.2005, 22:20
Цитата(DIMONSOFT @ 29.7.2005, 23:06)
Quadr0
А расшифровка как?

Никак. smile

Цитата(DIMONSOFT @ 29.7.2005, 22:35)
Существует ли алгоритм шифрования чтобы преобразовать строку в число
(привет=156548465484)

А что значит в число. В смысле в строку состоящую из цифр? Или в цепочку байтов?
Или тебя интересует именно шифрование?

Автор: Albinos_x 29.7.2005, 22:35
Цитата
А расшифровка как?

предложенный вариант не расшифруешь...


стоит его немного переделать:
Код

...
var    
  i : integer;    
  s, S_code: string;
  s_pr,: string[3];    
begin    
  S_code:='';
  s := 'vsyakaya erunda';    
  for i := 1 to Length(s) do    
   begin
   s_pr:= Inttostr(ord(s[i]));    
   case Length(s_pr) of
      0 : S_code:=S_code+'000';
      1 : S_code:=S_code+'00'+s_pr;
      2 : S_code:=S_code+'0'+s_pr;
      3 : S_code:=S_code+s_pr;
   end; {case}
   end; {for i}
  ShowMessage(S_code);
...

но этот код не шифрует, а только преабразует в числовое значение по буквам. Соответственно чтобы получить обратно стоку надо считывать по 3 символа переводить их в байтовое значение а следом в символьное. Если использовать шестнадцетиричный код то по будет по 2 сивола.

для шифрования необходимо провести ещё некоторые математические операции...

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

Автор: DIMONSOFT 29.7.2005, 22:44
Цитата(Albinos_x @ 29.7.2005, 22:35)
для чего это нужно и как собираешся использовать

Пишу защиту для своей проги, строки кодирую, шифрую(уже 5 алгоритмов нашел).Но нужно именно это. Необязательно чтобы код был невзломаем smile

Автор: Albinos_x 29.7.2005, 23:18
Цитата
Пишу защиту для своей проги, строки кодирую, шифрую(уже 5 алгоритмов нашел).Но нужно именно это. Необязательно чтобы код был невзломаем


если код можно расшифровать, то можно его взломать, вопрос только за сколько его сломают...

Код можно использовать свой. А почему иненно строка и где собираешся хранить в EXE или в отдельном файле или в реестре? И что хочешь вообще шифровать? И что за строки?

могу ещё предложить вариант защиты


http://www.zoforum.zeroes-and-ones.com.ru/index.php?showtopic=237

PS: прошу прощения у модераторов, что дал ссылку на другой форум. Просто лень заново писать. smile

Автор: Quadr0 30.7.2005, 03:08
...

Автор: Song 30.7.2005, 09:46
Чего-то не понял, а как можно преобразовать в число константу "привет=156548465484" ?

Автор: RA 30.7.2005, 10:31
Цитата(Song @ 30.7.2005, 09:46)
Чего-то не понял, а как можно преобразовать в число константу "привет=156548465484" ?


Детский алгоритм, каждая буква это две цифры: п=15 р=65 и так делее smile

Автор: Albinos_x 30.7.2005, 10:38
Поясняю:

Код

...    
var     
  i , j, Lcode, ls: integer;     
  s, S_code, pas: string;    
  s_pr: string[3];    
begin     
  S_code:='';    
  s := 'vsyakaya erunda'; 
  pas:='пиво';    
  ls := length(s);    
  lcode := Length(pas);
  for i := 1 to ls do     
    begin    
    s_pr:= Inttostr(ord(s[i]));  
    if j > lcode then    
        j := 0;                                                {if j}
    S_pr := inttostr(Ord(Pas[j]) xor ord(s[i]));    // здесь можно ещё чего-нибудь наворотить
   {Например:
   S_pr := inttostr((Ord(Pas[j]) xor ord(s[i])+i-j+ord(pas[Lcode-j]) mod 255);
   в общем дело твоей фантазии}
    inc(j);                                                   {j++}
   {бит это трехзначное число в десятиричной системе счисления, поэтому необходимо, для
 расшифровки добавлять нули в стоку. Иначе не сможем нормально расшифровать строку. 
Например: Не добавляем нули получим: '5'+'127'+'54'='512754'; Добавляем нули:
 '005'+'127'+'054'='005127054' - это мы уже сможем расшифровать без проблем}
   case Length(s_pr) of    
      0 : S_code:=S_code+'000';    
      1 : S_code:=S_code+'00'+s_pr;    
      2 : S_code:=S_code+'0'+s_pr;    
      3 : S_code:=S_code+s_pr;    
   end;                                            {case}    
   end;                                              {for i}    
  ShowMessage(S_code);    
...

Автор: DIMONSOFT 30.7.2005, 20:44
Цитата

Идея в том что, ключ регистрации записывается в реестр, и каждый раз при загрузке получается ключ и сверяется с записью в реестре, если ключ не верен или его нет, то предлагается зарегистрироваться


Цитата(RAdmin @ 30.7.2005, 10:31)
Детский алгоритм
-regmon

Автор: Albinos_x 30.7.2005, 21:38
Цитата(DIMONSOFT @ 30.7.2005, 20:44)
Цитата

Идея в том что, ключ регистрации записывается в реестр, и каждый раз при загрузке получается ключ и сверяется с записью в реестре, если ключ не верен или его нет, то предлагается зарегистрироваться


Цитата(RAdmin @ 30.7.2005, 10:31)
Детский алгоритм
-regmon

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

Автор: TP@MB@Y 30.7.2005, 22:22
А можно в соответствии с алфавитом кодировать, т.е. а=01 б=02 в=03..... A=11 Б=12 В=13 .... То же самое для латиницы.
Геморно, но тоже вариант =)

Автор: Song 30.7.2005, 22:31
а... не увидел "алгоритм шифрования". Во млин привычка читать по диоганали.

Автор: Clicker 22.8.2005, 11:32
Не уходя от темы, а как преобразовать строку "126.5" в число "162.5"

Автор: Dimannn 22.8.2005, 20:39
Цитата(TP @ 30.7.2005, 22:22)
А можно в соответствии с алфавитом кодировать, т.е. а=01 б=02 в=03..... A=11 Б=12 В=13 .... То же самое для латиницы.


Смысла нет:
а=Ord(а)-(позиция первой буквы в Таблице Символов).

б=Ord(б)-(позиция первой буквы в Таблице Символов).

Автор: Даркен 24.8.2005, 07:57
Подскажите плиз как преобразовать строку в двоичный код?

Автор: ShadeSt 24.8.2005, 08:51
А для чего это надо, если не секрет?
Теоритически проходить по строке, брать код каждого символа и переводить из десятичной в двоичную, при этом записывая в другую строку, полученная строка будет в 8 раз длиннее, если только не проитись по ней и там где часто встречаются нули или единицы записать что нить типа N1 или N0, где N - количество повторений

Автор: ShadeSt 24.8.2005, 09:35
Я полагаю что так, но самому интересно как еще можно..
Код

function DecToBin(Const aDecNum : Integer): String;
Var
  I : Integer;
Begin
  Result := '';
  I := aDecNum;
  While I > 1 Do Begin
    If (I Mod 2) = 1 Then
      Result := '1' + Result
    Else
      Result := '0' + Result;
    I := I Div 2;
  End;
  Result := IntToStr(I) + Result;
  Result := StringOfChar('0', 8 - Length(Result)) + Result;

End;


procedure TForm1.Button1Click(Sender: TObject);
Var
  S1, S2 : String;
  I, C   : Integer;
  Sep    : String;
begin
  S1 := 'somestring';
  S2 := '';
  Sep := '|'; // разделитель, если надо
  For I:=1 To Length(S1) Do Begin
    C := Ord(S1[I]);
    S2 := S2 + DecToBin(C) + Sep;
  End;
  ShowMessage(S2);
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)