![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Доброго время суток!
Нужна помощь. Пишу программу, в которой необходима шифровка с заданием ключа. Перерыл несколько различных методов, но все они дают одну и ту же проблему - если он например видет на своём пути hag5mo (это только так к примеру, на деле он сталкивается с другими значениями, но понять причину ни как не могу), то шифрует до 5, а что дальше пропускает мимо глаз... У каждого метода свои "значения затупка". Короче мне нужен хороший метод шифровки, с заданием ключа от 1 до 9 цифр (можно и больше). |
|
#2
|
|||
|
|||
|
Я делаю так:
Код:
for key:=1 to length(s) do begin t:=ord(s[key]); t:=t+key; s[key]:= chr(t); end; принцип работы: Например есть слово "РЕКЛАМА". при key=1 слово станет СЕКЛАМА, при 2 СЗКЛАМА, при 3 СЗНЛАМА и т.д. Можно еще и так: Код:
key:=Random(round(9)); //функция round необходима для того, чтобы не было дробных значений!! for m:=1 to length(s) do begin t:=ord(s[m]); t:=t+key; s[m]:= chr(t); end; edit1.text:=s+key; Надеюсь тебе поможет!!!!; при дешифровании считывай последний символ в строке или слове(смотря куда будешь ключ писать) и пиши t:=t-key; И будет тебе счастье!!!! )))))ПЫ.СЫ. Писал прямо на форуме, поэтому могут быть ошибки!!! Последний раз редактировалось ~ SaM ~, 04.04.2007 в 18:16. |
|
#3
|
|||
|
|||
|
Гы.Забыл сказать....
Ключ должен быть только типа integer!!! |
|
#4
|
||||
|
||||
|
to ~ SaM ~
Random никогда не вернет дробного значения, если вызывается с параметром to TitiS Если никаких серьезных требований к шифрованию не предъявляется, то можно написать простые функции с применением xor и not. Вот пример Код:
// Кодирование строки
function Decode(text, key: string): string;
var
code: Longint;
i: integer;
begin
if Length(text) = 0 then Exit;
if Length(key) = 0 then
begin
Result := text;
Exit;
end;
code := 0;
for i := 1 to Length(key) do
Inc(code, Ord(key));
for i := 1 to Length(text) do
Result := Result + Chr(not((Ord(text) + i) xor code));
end;
// Декодирование строки
function Encode(text, key: string): string;
var
code: Longint;
i: integer;
begin
if Length(text) = 0 then Exit;
if Length(key) = 0 then
begin
Result := text;
Exit;
end;
code := 0;
for i := 1 to Length(key) do
Inc(code, Ord(key[i]));
for i := 1 to Length(text) do
Result := Result + Chr((not(Ord(text[i]) xor code)) - i);
end; |
|
#5
|
|||
|
|||
|
Decoding, твой код не срабатывает - пишет не совпадение типов переменных... =(
~ Sam ~ пойду разбираться с твоим способом |
|
#6
|
||||
|
||||
|
to TitiS
странно, но похоже, что форум проглючило. Я вставил код прямо из Delphi методом Copy/Paste, но посмотрев его после твоего сообщения, увидел, что код не соответствует оригиналу… Выкладываю исходники… Decode.zip |