Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
ВнизЗашифровать строку Найти похожие ветки
← →
Елена (2002-02-18 07:45) [0]Подскажите, пожалуйста, какой-нибудь несложный алгоритм шифрования строки.
Заранее благодарна.
← →
MrBeer (2002-02-18 08:05) [1]TEA - Tiny Encryption Algorithm
http://vader.brad.ac.uk/tea/tea.shtml
best regards.
← →
Елена (2002-02-18 08:26) [2]Там все на Си :(
← →
MrBeer (2002-02-18 08:26) [3]esli ti ne v silah perevesti 3 strochki na C... nu znaesh...
best regards.
← →
MBo (2002-02-18 08:30) [4]в текстовый файл сохранять надо?
если нет, может подойти простейшее xor-шифрование
for i:=1 to length(s) do
s[i]:=chr(ord(s[i]) xor ord(passw[1+(i mod length(passw))]));
одно и то же для шифрования/расшифровки
при этом в строке могут получиться непечатные символы (<#32)
← →
MrBeer (2002-02-18 08:34) [5]2 MBo:
nda kriptostoikostj prosto "blesk". TEA - 3 stroki encrypt, 3 decrypt. Po idee stoikostj na urovne IDEA, kljuch 128bit.
best regards.
← →
MBo (2002-02-18 08:36) [6]>MrBeer
так и цель неясна - вдруг и этого хватит
← →
Елена (2002-02-18 08:40) [7]2 MrBeer
Учитесь отвечать у MBo ©
← →
MrBeer (2002-02-18 08:42) [8]2 MBo:
Nu v principe da, tolko shifracija xor-om malo spasjot...
2 Елена:
Esli C ne nravitsja, tam estj esho versii na assembler-e
best regards.
← →
Елена (2002-02-18 08:45) [9]2 MrBeer
Может мне еще перейти на программирование в машинных кодах?
← →
MBo (2002-02-18 08:48) [10]>Елена
>Учитесь отвечать
некорректно.
Надо более полно ставить вопрос - решение зависит от этого
В каком-то случае сойдет и тот примитив, который я указал, но это, во первых, "от дурака", во вторых, не подлежит записи в текстовый файл - могут появиться, например символы #10, #13 - нежеланные переводы строк и соответственно неверная расшифровка.
Для исключения этого можно записывать строку в filestream - сначала длину, потом данные
← →
MrBeer (2002-02-18 08:49) [11]2 Елена:
ochen izvinajusj chto sdelal glupostj otvetiv na vopros.
best regards.
← →
Елена (2002-02-18 09:02) [12]MBo, у меня что-то не получается :(
procedure TForm1.Button1Click(Sender: TObject);
const
passw="2002";
var
i: integer;
s: string;
begin
s:=Edit1.Text;
for i:=1 to length(s) do
s[i]:=chr(ord(s[i]) xor ord(passw[1+(i mod length(passw))]));
Edit2.Text:=s;
end;
Задаю строку и получается какая-то ерунда :(
← →
MBo (2002-02-18 09:27) [13]эта ерунда - зашифрованная строка, в которой могут быть любые символы от #0 до #255
← →
Фэ (2002-02-18 10:11) [14]Для кодирования бинарных файлов существуют uuencode и mime64.
Строки с CR+LF можно рассматривать как частный случай.
← →
Елена (2002-02-18 10:31) [15]Я ввожу 123456789, а возвращается -
← →
22606 (2002-02-18 10:47) [16]To MBo ©: девушка Вас, я так понял, как раз похвалила и поставила в пример, а Вы приняли ее похвалу неправильно.
MrBeer ©: вместо пререканий взяли-бы и перевели эти 3 строки в код Делфи. Или Вы откликнулись на вопрос, для того, чтобы покрасоваться знаниями языков.
И зря Вы так критикуете этот алгоритм. Я уверен, что Елена не проектирует новую систему криптозащиты, а для 95 % обычных пользователей этот алгоритм будет неразрешим. Да и, по-большому счету, при достаточной длине ключа (равной, например, длине шифруемого текста) не расшифруете его и Вы.
← →
MrBeer (2002-02-18 10:54) [17]2 22606:
Ljudi slishkom chasto hotjat vsjo gotovoe na bljudechke s goluboi kojomochkoi, nado bi i samim porabotatj.
"для 95 % обычных пользователей этот алгоритм будет неразрешим"
"Obichnie" polzovateli ne zanimajutsja lomaniem algoritmov, dlja etovo nahodjatsja ljudi namnogo bolee prodvinutie... Hotja v Vashih slovah mozhet bitj dolja pravdi, t.k. Елена vsjo esho ne skazala zachem eto nuzhno.
Best regards.
← →
Елена (2002-02-18 10:59) [18]Олег, Вы совершенно правы, я не планирую создать новую систему криптозащиты.
MrBeer, я прошу прощения, если обидела Вас.
← →
[NIKEL] (2002-02-18 11:01) [19]первое что на ум пришло :)
сложение каждого символа строки с ключом по операции исключающее ИЛИ, чтоб раскодировать надо сделать тоже самое с закадированной стракой с тем же ключом и тебе вернётся исходная строка
можно реализовать так :
AnsiString Code() AnsiString s, char Key)
{
for(int i = 1;i <= s.Lenght(); i++)
s[i] = s[i] ^ Key;//или так можно записать s[i] ^= Key
return s;
}
← →
22606 (2002-02-18 11:32) [20]To Елена:
Наши с Вами пути раньше не пересекались в Интернете ?
Или Вы просто узнали мое имя в анкете ?
To MrBeer ©: Неужели Вы сами никогда не хотели очень быстро получить конкретный ответ на свой вопрос. Или Вы предпочитаете встрявать в длительные диспуты для решения пустячного вопроса ?
Меня всегда такие ответы наталкивают на мысль, что человек не может промолчать, что он что-то знает, но говорить этого не хочет. Типа: а я вот знаю и этот алгоритм и Си и Ассемблер, но не скажу, так как жаба давит, но похвастаться хочется, ну разве что если меня очень попросят (а я еще поламаюсь), похвалят, тогда сделаю широкий жест и поделюсь частью своих знаний, но не всеми, пусть человек еще помучается.
Извините, утрирую, но очень часто так бывает. Даже просто в жизни.
← →
SDS (2002-02-18 11:32) [21]to [NIKEL] - Опять C (даже по - мойму C++ - если я не путаю CBuilder там класс AnsiString) :)
to Елена
Вы на них внимания не обращайте, для большинства программистов девушка и программирование это нечто из области фантастики, прошу за нас всех скопом прощения, вот процедур строки готовые и на паскале, надеюсь подойдет, если, что пишите на "мыло", я тут в последнее время не часто бываю :)
Расшифровка
function Decrypt(const s : string; Key : word) : string;
var
i : integer;
c1, c2 : word;
begin
c1 := $DA4D;
c2 := $15B1;
Result := s;
for i := 1 to length(S) do begin
Result[i] := char(byte(s[i]) xor (Key shr 8));
Key := (byte(s[i]) + Key) * c1 + c2;
end;
end;
Шифровка
function Encrypt(const s : string; Key : word) : string;
var
i : integer;
c1, c2 : word;
begin
c1 := $DA4D;
c2 := $15B1;
Result := S;
for i := 1 to length(s) do begin
Result[i] := char(byte(s[i]) xor (Key shr 8));
Key := (byte(Result[i]) + Key) * c1 + c2;
end;
end;
← →
[NIKEL] (2002-02-18 11:46) [22]
2 SDS слишком громоздко :) девушка попрасила лёгкий алгоритм :)
вот он - лёгкий :) одна функция и шифрует и дешифрует
а на счет Билдера - тот же Дельфи тока С++ :) и переписать функцию не составит проблем на Дельфи и обратно :)
← →
Елена (2002-02-18 11:47) [23]Олег и Дмитрий
Спасибо!!!
← →
SDS (2002-02-18 12:17) [24]to [NIKEL]
Ну, наверное, для тебя и может для Вашего покорного слуги да, не составит, но для человека который C/C++ даже в глаза не видел это будет несколько сложней :)
to Елена
Если спасибо для Дмитрия это для меня (я тоже Дмитрий), тогда не за что, всегда рад помочь :)
← →
Елена (2002-02-18 12:24) [25]SDS, да для Вас!
← →
22606 (2002-02-18 12:30) [26]To [NIKEL] ©: Легкий скорее всего подразумевался легкореализуемый, а не имеющий меньшее число строк кода.
TO Елена: Позволю себе добавить к коду Дмитрия пару советов.
1. i лучше объявить как LongInt (текст может быть большой)
var I: LongInt;
2. значениям c1 и с2 лучше присвоить свои значения, их можно объявить как константы и вынести за пределы самих функций (не упоминать как var в каждой).
Например:
const
C1 = 2222; // здесь нужно подставить свои значения
C2 = 3333; // здесь нужно подставить свои значения
3. Если Вы собираетесь где-то сохранять зашифрованное значение, не забывайте, как правильно предупреждал MBo ©, что там могут быть непечатаемые символы (с кодом до 32) и последующее считывание может вернуть другой результат.
Для предотвращения этого, зашифрованный результат можно сохранить, преобразовав его в шестнадцатиричное представление.
А при считывании преобразовать обратно.
Например функциями
(*************************************************************
Asc2Hex( <String>) - Конвертирует строку, возвр 16-ричное
представление (длина в 2 раза больше)
**************************************************************)
function Asc2Hex(sStroka:String): String;
var i:integer;
begin
Result:="";
for i:=1 to length(sStroka) do
Result := Result+IntToHex(Byte(sStroka[i]),2);
end;
(***************************************************************
Hex2Asc( <String>) - РасКонвертирует строку, конверт ранее Asc2Hex
в обычный формат (длина в 2 раза меньше)
***************************************************************)
function Hex2Asc(sStroka:String): String;
var i:integer;
begin
Result:="";
for i:=0 to (length(sStroka) div 2)-1 do
Result := Result+Char(StrToIntDef("$"+copy(sStroka,i*2+1,2),0));
end;
Кстати и эти примитивные преобразования для многих могут оказаться неразрешимыми :-) и в каких-то случаях могут даже назваться криптованием (все зависит от того от кого нужно скрыть информацию).
4. Спасибо и Вам за Ваше Спасибо. :-)
← →
MBo (2002-02-18 13:28) [27]избавление от непечатных типа uuencode
строка удлиняется в 4/3 раза
procedure encryptxor(s,pass:string;var s1:string);
var i,j,k:integer;
begin
if (length(s)=0) or (length(pass)=0) then exit;
for i:=1 to length(s) do
s[i]:=chr(ord(s[i]) xor ord(pass[1+(i mod length(pass))]));
case length(s) mod 3 of
1: s:=s+#255#255;
2: s:=s+#255;
end;
s1:="";
for i:=1 to length(s) div 3 do begin
j:=(ord(s[3*i-2]) and 252) shr 2;
s1:=s1+chr(j+48);
j:=(ord(s[3*i-2]) and 3) shl 4;
k:=(ord(s[3*i-1]) and 240) shr 4;
s1:=s1+chr((j or k)+48);
j:=(ord(s[3*i-1]) and 15) shl 2;
k:=(ord(s[3*i]) and 192) shr 6;
s1:=s1+chr((j or k)+48);
k:=(ord(s[3*i]) and 63);
s1:=s1+chr(k+48);
end;
end;
procedure decryptxor(s,pass:string;var s1:string);
var i,j,k:integer;
begin
if (length(s)=0) or (length(pass)=0) then exit;
s1:="";
for i:=1 to length(s) div 4 do begin
k:=(ord(s[4*i-3])-48) shl 2;
j:=((ord(s[4*i-2])-48) and 48) shr 4;
s1:=s1+chr(k or j);
k:=((ord(s[4*i-2])-48) and 15) shl 4;
j:=((ord(s[4*i-1])-48) and 60) shr 2;
s1:=s1+chr(k or j);
k:=((ord(s[4*i-1])-48) and 3) shl 6;
j:=(ord(s[4*i])-48);
s1:=s1+chr(k or j);
end;
while s1[length(s1)]=#255 do delete(s1,length(s1),1);
for i:=1 to length(s1) do
s1[i]:=chr(ord(s1[i]) xor ord(pass[1+(i mod length(pass))]));
end;
← →
Елена (2002-02-18 13:31) [28]Все сохранила в отдельной папочке :o)
← →
MBo (2002-02-18 13:35) [29]а, уже написали
>22606
>приняли неправильно
Правильно я понял - MrBeer дал дельный совет, и не его вина, если он не был воспринят из-за трудности реализации. Ну ладно, все кончилось миром.
← →
MIA (2002-02-20 11:39) [30]Самое простое
for i:=1 to length(st_init) do
st_fin:=st_fin+chr(255-ord(st_init[i]));
Ещё более надёжная, но более громоздко и также очень простая
Создать множество из 255 символов в произвольном порядке (известном только вам)
И в итоговую строку ставить прототип из этого множества.
И т.д. и т.п.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.006 c