Автор работы: Пользователь скрыл имя, 21 Мая 2013 в 19:32, курсовая работа
Скорость шифрования алгоритма во многом зависит от используемой техники и системы команд. На различных архитектурах один алгоритм может значительно опережать по скорости его конкурентов, а на другом ситуация может сравняться или даже измениться прямо в противоположную сторону. Более того, программная реализация значительно зависит от используемого компилятора. Использование ассемблерного кода может повысить скорость шифрования. На скорость шифрования влияет время выполнения операций mov, add, xor, причём время выполнения операций увеличивается при обращении к оперативной памяти (для процессоров серии Pentium примерно в 5 раз). Blowfish показывает более высокие результаты при использовании кэша для хранения всех подключей. В этом случае он опережает алгоритмы DES, IDEA.
Содержание
• 1 Введение
• 2 Описание алгоритма
o 2.1 Параметры
o 2.2 Функция F(x)
o 2.3 Алгоритм шифрования 64-битного блока с известным массивом P и F(x)
o 2.4 Алгоритм Blowfish
o 2.5 Выбор начального значения P-массива и таблицы замен
• 3 Криптостойкость
• 4 Пример работы алгоритма
• 5 Применения
• 6 Заключение
• 7 Список литературы
• 8 Приложение
0x9cee60b8,0x8fedb266,
0x193602a5,0x75094c29,
0x6b8fe4d6,0x99f73fd6,
0x4cdd2086,0x8470eb26,
0x3c971814,0x6b6a70a1,
0x3e07841c,0x7fdeae5c,
0xf01c1f04,0x0200b3ff,
0xd19113f9,0x7ca92ff6,
0xc8b57634,0x9af3dda7,
0xe238cd99,0x3bea0e2f,
0x6f420d03,0xf60a04bf,
0xde9a771f,0xd9930810,
0x501adde6,0x9f84cd87,
0xec7aec3a,0xdb851dfa,
0xdd433b37,0x24c2ba16,
0x71dff89e,0x10314e55,
0x3c11183b,0x5924a509,
0x86e34570,0xeae96fb1,
0x2965dcb9,0x99e71d0f,
0xc6150eba,0x94e2ea78,
0x1939260f,0x19c27960,
0xe3bc4595,0xa67bc883,
0x65582185,0x68ab9802,
0x1521b628,0x29076170,
0x0334fe1e,0xaa0363cf,
0xeecc86bc,0x60622ca7,
0xa02369b9,0x655abb50,
0x9b540b19,0x875fa099,
0x11ed935f,0x16681281,
0x57f584a5,0x1b227263,
0x8fd948e4,0x6dbc3128,
0x5d4a14d9,0xe864b7e3,
0xdb6c4f15,0xfacb4fd0,
0xd81e799e,0x86854dc7,
0xfc8883a0,0xc1c7b6a3,
0x095bbf00,0xad19489d,
0x1dadf43e,0x233f7061,
0x7cde3759,0xcbee7460,
0xe8efd855,0x61d99735,
0x9e447a2e,0xc3453484,
0x675fda79,0xe3674340,
0x153e21e7,0x8fb03d4a,
};
}
private uint[] SetupS2()
{
return new uint[] {
0xe93d5a68,0x948140f7,
0xbcf46b2e,0xd4a20068,
0x1e39f62e,0x97244546,
0x70f4ddd3,0x66a02f45,
0x96eb27b3,0x55fd3941,
0x0a2c86da,0xe9b66dfb,
0x4f3ffea2,0xe887ad8c,
0xce78a399,0x406b2a42,
0x1dc9faf7,0x4b6d1856,
0x6841e7f7,0xca7820fb,
0x55533a3a,0x20838d87,
0xcca92963,0x99e1db33,
0xfdf8e802,0x04272f70,
0x48c1133f,0xc70f86dc,
0x325f51eb,0xd59bc0d1,
0xdff8e8a3,0x1f636c1b,
0x6b2395e0,0x333e92e1,
0xde720c8c,0x2da2f728,
0x5449a36f,0x877d48fa,
0x3a6f6eab,0xf4f8fd37,
0xc67b5510,0x6d672c37,
0xb5390f92,0x690fed0b,
0xbb132f88,0x515bad24,
0x8026e297,0xf42e312d,
0x6a124237,0xb79251e7,
0x3d25bdd8,0xe2e1c3c9,
0x64af674e,0xda86a85f,
0x60787bf8,0x6003604d,
0x83426b33,0xf01eab71,
0x55464299,0xbf582e61,
0x5366f9c3,0xc8b38e74,
0x846a0e79,0x915f95e2,
0xb90bace1,0xbb8205d0,
0x662d09a1,0xc4324633,
0x1ab93d1d,0x0ba5a4df,
0xa1e2ce9b,0x4fcd7f52,
0x9af88c27,0x773f8641,
0x006058aa,0x30dc7d62,
0xbbcbee56,0x90bcb6de,
0x39720a3d,0x7c927c24,
0xed545578,0x08fca5b5,
0xa28514d9,0x6c51133c,
0xd79a3234,0x92638212,
};
}
private uint[] SetupS3()
{
return new uint[] {
0x3a39ce37,0xd3faf5cf,
0xd3822740,0x99bc9bbe,
0xb78c1b6b,0x21a19045,
0xc6a376d2,0x6549c2c8,
0x2939bbdb,0xa9ba4650,
0x63ef8ce2,0x9a86ee22,
0x83c061ba,0x9be96a4d,
0x4ba99586,0xef5562e9,
0x80e4a915,0x87b08601,
0x2cf0b7d9,0x022b8b51,
0x1f9f25cf,0xadf2b89b,
0x47b0acfd,0xed93fa9b,
0x785f0191,0xed756055,
0x03a16125,0x0564f0bd,
0x1b3f6d9b,0x1e6321f5,
0x03563482,0x8aba3cbb,
0x4de81751,0x3830dc8e,
0x5121ce64,0x774fbe32,
0xa2ae0810,0xdd6db224,
0x586cdecf,0x1c20c8ae,
0xdda26a7e,0x3a59ff45,
0x8d6612ae,0xbf3c6f47,
0x740e0d8d,0xe75b1357,
0x34d2466a,0x0115af84,
0x6f3f3b82,0x3520ab82,
0xbb3a792b,0x344525bd,
0xe01cc87e,0xbcc7d1f6,
0xd0dadecb,0xd50ada38,
0xf79e59b7,0x43f5bb3a,
0x0f91fc71,0x9b941525,
0xb6c1075e,0xe3056a0c,
0x4c98a0be,0x3278e964,
0x1b0a7441,0x4ba3348c,
0xe60b6f47,0x0fe3f11d,
0x1618b166,0xfd2c1d05,
0x93a83531,0x56cccd02,
0xde966292,0x81b949d0,
0x45e1d006,0xc3f27b9a,
0x71126905,0xb2040222,
0x38abbd60,0x2547adf0,
0x85cbfe4e,0x8ae88dd8,
0x01c36ae4,0xd6ebe1f9,
0xb74e6132,0xce77e25b,
};
}
#endregion
#region Conversions
//gets the first byte in a uint
private byte wordByte0(uint w)
{
return (byte)(w / 256 / 256 / 256 % 256);
}
//gets the second byte in a uint
private byte wordByte1(uint w)
{
return (byte)(w / 256 / 256 % 256);
}
//gets the third byte in a uint
private byte wordByte2(uint w)
{
return (byte)(w / 256 % 256);
}
//gets the fourth byte in a uint
private byte wordByte3(uint w)
{
return (byte)(w % 256);
}
//converts a byte array to a hex string
private string ByteToHex(byte[] bytes)
{
StringBuilder s = new StringBuilder();
foreach (byte b in bytes)
s.Append(b.ToString("x2"));
return s.ToString();
}
//converts a hex string to a byte array
private byte[] HexToByte(string hex)
{
byte[] r = new byte[hex.Length / 2];
for (int i = 0; i < hex.Length - 1; i += 2)
{
byte a = GetHex(hex[i]);
byte b = GetHex(hex[i + 1]);
r[i / 2] = (byte)(a * 16 + B) ;
}
return r;
}
//converts a single hex character to it's decimal value
private byte GetHex(char x)
{
if (x <= '9' && x >= '0')
{
return (byte)(x - '0');
}
else if (x <= 'z' && x >= 'a')
{
return (byte)(x - 'a' + 10);
}
else if (x <= 'Z' && x >= 'A')
{
return (byte)(x - 'A' + 10);
}
return 0;
}
#endregion
}
}