Перейти до

Кодирование пакета inetaccess


Рекомендованные сообщения

инициализация

public Blowfish(byte[] key)
    {
	    short i;
	    short j;
	    short k;
	    uint data;
	    uint datal;
	    uint datar;
	    P = _P.Clone() as uint[];
	    S = _S.Clone() as uint[,];


	    j = 0;
	    for (i = 0; i < N + 2; ++i)
	    {
		    data = 0x00000000;
		    for (k = 0; k < 4; ++k)
		    {
			    data = (data << 8) | key[j];
			    j++;
			    if (j >= key.Length)
			    {
				    j = 0;
			    }
		    }
		    P[i] = P[i] ^ data;
	    }
	    datal = 0x00000000;
	    datar = 0x00000000;
	    for (i = 0; i < N + 2; i += 2)
	    {
		    Encipher(ref datal, ref datar);
		    P[i] = datal;
		    P[i + 1] = datar;
	    }

	    for (i = 0; i < 4; ++i)
	    {
		    for (j = 0; j < 256; j += 2)
		    {
			    Encipher(ref datal, ref datar);
			    S[i, j] = datal;
			    S[i, j + 1] = datar;
		    }
	    }
    }

Ссылка на сообщение
Поделиться на других сайтах
  • Відповіді 67
  • Створено
  • Остання відповідь

Top Posters In This Topic

криптер

public void Encipher(ref uint xl, ref uint xr)
    {
	    uint Xl;
	    uint Xr;
	    uint temp;
	    short i;
	    Xl = xl;
	    Xr = xr;
	    for (i = 0; i < N; ++i)
	    {
		    Xl = Xl ^ P[i];
		    Xr = F(Xl) ^ Xr;
		    temp = Xl;
		    Xl = Xr;
		    Xr = temp;
	    }
	    temp = Xl;
	    Xl = Xr;
	    Xr = temp;
	    Xr = Xr ^ P[N];
	    Xl = Xl ^ P[N + 1];
	    xl = Xl;
	    xr = Xr;
    }

Ссылка на сообщение
Поделиться на других сайтах

ну и F

 private uint F(uint x)
    {
	    ushort a;
	    ushort b;
	    ushort c;
	    ushort d;
	    uint y;
	    d = (ushort)(x & 0x00FF);
	    x >>= 8;
	    c = (ushort)(x & 0x00FF);
	    x >>= 8;
	    b = (ushort)(x & 0x00FF);
	    x >>= 8;
	    a = (ushort)(x & 0x00FF);
	    //y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d];
	    y = S[0, a] + S[1, b];
	    y = y ^ S[2, c];
	    y = y + S[3, d];
	    return y;
    }

 

обложатся вроде негде :)

Ссылка на сообщение
Поделиться на других сайтах

нет в C# при перекодировке стринга в байт выходит 7 байтов которые используются тут

 for (i = 0; i < N + 2; ++i)
		{
			data = 0x00000000;
			for (k = 0; k < 4; ++k)
			{
				data = (data << 8) | key[j];
				j++;
				if (j >= key.Length)
				{
					j = 0;
				}
			}
			P[i] = P[i] ^ data;
		}

Уже вижу в коде ошибку. Куда делася ORIG_P?

Ссылка на сообщение
Поделиться на других сайтах

инициализация

public Blowfish(byte[] key)
	{
		short i;
		short j;
		short k;
		uint data;
		uint datal;
		uint datar;
		P = _P.Clone() as uint[];
		S = _S.Clone() as uint[,];


		j = 0;
		for (i = 0; i < N + 2; ++i)
		{
			data = 0x00000000;
			for (k = 0; k < 4; ++k)
			{
				data = (data << 8) | key[j];
				j++;
				if (j >= key.Length)
				{
					j = 0;
				}
			}
			P[i] = P[i] ^ data;
		}
		datal = 0x00000000;
		datar = 0x00000000;
		for (i = 0; i < N + 2; i += 2)
		{
			Encipher(ref datal, ref datar);
			P[i] = datal;
			P[i + 1] = datar;
		}

		for (i = 0; i < 4; ++i)
		{
			for (j = 0; j < 256; j += 2)
			{
				Encipher(ref datal, ref datar);
				S[i, j] = datal;
				S[i, j + 1] = datar;
			}
		}
	}

Где инициализация S?

Ссылка на сообщение
Поделиться на других сайтах

nashel sait s onlajn cryptovaniem blowfish .. proveril .. real'no xren ego znaet chto kriptovala proshlaya realizaciya ... nashel eshe odin , zapustil encrypt_CBC (pravda v e etom algritme eshe IV est' (krome key-a)) vpisal v IV (init vector) nuli , vzyal string , perevel ego v bajt , zakodiroval bajt , perevel v hex dex (na etom sajte rezul'tat vydavalo v dec hex) .. sravnil rezul'taty .. odinakovye => 100% rabochaya realizaciya vzyal iz vpisal v nego crypt_stg ^_^ tak kak tam pravyj i levyj bajt poluchaetsya inache chem u obyknovennogo algoritma ... zakrpittoval paket i opyat' inetaccess.cpp > 21:07:23 > User 'ъo|д╘j,Ґ╣Ї5ъ▀р╣Ї5ъ▀р╣Ї5ъ▀р' NOT found! ... mozgi kipyat i trebuyut pravosudiya :P

Ссылка на сообщение
Поделиться на других сайтах

Посмотри вот это: http://local.com.ua/forum/topic/14275-%D0%BD%D0%B5-%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B8%D1%82-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/

Там я решал проблемы с шифрованием на системах с разным порядком байт. Там есть тестовые программки - они помогут. Основная идея - отследить порядок инициализации контекста и шифрования и найти где они начинают различаться.

Ссылка на сообщение
Поделиться на других сайтах

для компилирования в C используется библиотека ssl ? у меня она не ипользовалась , может из за этого разница в ctx ?

Не используется. К сожалению. В OpenSSL универсальная и переносимая реализация.

Ссылка на сообщение
Поделиться на других сайтах

Я в этом и не сомневался. Просто утилиты которые я тогда выкладывал могут помочь в диагностировании проблемы.

Ссылка на сообщение
Поделиться на других сайтах

там текстовые файлы с кракозябрами внутри :)

А почитать внимательно что я там писал? :)

Во вложении файл crypt.txt. Скачать, переименовать в crypt.tar.bz2 (не смог загрузить так), распаковать.

...

Ссылка на сообщение
Поделиться на других сайтах

перевел test.cpp na C# библиотека криптования последняя результат 5D 33 E1 FE 85 17 3F 7A A2 B8 EF D4 6F 2B 72 1C а должен был быть Encrypted string: 5d 33 e1 fe 85 17 3f 7a 3e 91 24 35 3e da 56 38 , то есть разница во втором байте вышла

Ссылка на сообщение
Поделиться на других сайтах

хотя есть еще момент в ключе для инициализации там 7 байт а не 8 как в тесте

Тест - дело такое. Там все что угодно может быть.

Ссылка на сообщение
Поделиться на других сайтах

прикол на приколе , в тесте поставил ключ из стг сравнил закодированное , все точно , разозлился собрал свой UDP сервер , взял клиент Inetaccess с сайта , послал с него инфо на подключение ... так же разкодировать не выходит ... попытался поискать в дате полученной от клиента закодированный логин (думал может сдвинут куда то ) ... ни одного совпадения блока не нашел . так что все намного интереснее :)

Ссылка на сообщение
Поделиться на других сайтах

наткнулся кажется на то в чем дело ... и так вопрос в тесте original содержит 16 символов, если скормить ему меньше к примеру 8, чем забьются остальные ?

Ссылка на сообщение
Поделиться на других сайтах

вопрос byte2block там идет выражение *c++ каким элементом он является в const char *c ? нулевым или первым ?

Постинкремент возвращает старое значение переменной. Значит нулевым.

Ссылка на сообщение
Поделиться на других сайтах

наткнулся кажется на то в чем дело ... и так вопрос в тесте original содержит 16 символов, если скормить ему меньше к примеру 8, чем забьются остальные ?

Ну минимальный же блок для шифрования 8 байт. 16 я уже не помню для чего сделал. Может и просто так.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.


×
×
  • Створити нове...