Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > XOR шифрование


Автор: Zdvig 21.10.2005, 18:57
Пытаюсь перевести код из делфи, но что-то не получается. Может кто подскажет? Буду очень благодарен!

Код

function txxor(text:string):string;
var key,longkey : String;
i: Integer;
toto: char;
begin
    for i := 0 to (length(text) div length(key)) do
      longkey := longkey + key;
        for i := 1 to length(text) do begin
          toto := chr((ord(text[i]) XOR ord(longkey[i])));
          result := result + toto;
        end;
end;


Автор: Exception 22.10.2005, 12:21
сишарп знаю средне, чёто вроде этого:
Код

string txxor(string text) {
int i,j;
string key,longkey;
char toto;
for(i=0;i<=(text.Length \ key.Length);i++){
longkey += key
for (j=0;j<=text.Length;j++){
//плохо знаю ф-ции работы с аскии кодами символов в с# - сам глянь в обжект браузере
}
}
}

Автор: mr.DUDA 22.10.2005, 13:58
Код
using System;

namespace ConsoleApplication1
{
    class Class1
    {
        public static string txxor(string text)
        {
            string key="123", longkey="";
            for(int i=0; i<(1+text.Length/key.Length); i++)
                longkey += key;
            string result = "";
            for(int i=0; i<text.Length; i++)
                result += (char)(text[i] ^ longkey[i]);
            return result;
        }

        [STAThread]
        static void Main(string[] args)
        {
            string str = "Bla-bla-bla";
            string xored_str = txxor(str);
            string unxored_str = txxor(xored_str);

            Console.WriteLine("Зашифрованная строка: " + xored_str);
            Console.WriteLine("Расшифрованная строка: " + unxored_str);
        }
    }
}

Автор: Zdvig 22.10.2005, 18:17
Спасибо! Работает. Но не шифрует большие объемы текста, обрезает уже на второй, третьей строчке. И с кодировкой явные проблемы, примерно то же, о чем я писал в теме Hash функции. Подозреваю, что дело в библиотеках C#

Автор: mr.DUDA 23.10.2005, 12:59
Не нравится строковое представление двоичных данных ? Можно разбить каждый байт результата на 2 тетрады, и добавить 32 - всё будет в пределах стандартной таблицы ASCII. Большие объёмы string-у по барабану. Проверяй свой код, ищи ошибку у себя.

Автор: Zdvig 23.10.2005, 13:36
Цитата(mr @ 23.10.2005, 12:59)
Проверяй свой код, ищи ошибку у себя.

Код перенес "как есть" написанный тобой. Со стрингами понтяно.

Автор: mr.DUDA 23.10.2005, 16:27
Цитата(Zdvig @ 23.10.2005, 13:36)
Код перенес "как есть" написанный тобой.

Видимо, дело в том что при XOR-е может получиться символ с кодом 0 - такой символ означает конец строки. Ноль может выйти, если в исходной строке встретился символ, равный символу из ключа.

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