Сети Файтселя

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Здравствуйте.
Пишу программу, выполняющую шифрование с помощью сетей Файстеля.

C++:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace faistel_net
{
class Program
{
static void Main(string[] args)
{
//Начальные данные - могут иметь любые другие допустимые значения
UInt32 l = 0xAAF140AE;
UInt32 r = 0xB678A198;
Byte key = 0xAB;
//
UInt32 swap;//Служебная переменная
Console.WriteLine("Begin Left = {0}, Right = {1}, Key = {2}",l,r,key);
for (int i = 0; i < 16; i++)//Чем больше раундов, тем лучше шифрование. Или нет?
{
swap = l ^ r ^ ((UInt16)key * 0xABCD1234);
l = r;
r = swap;
Console.WriteLine("Iteration {0}: Left = {1}, Right = {2} ", i, l, r);
}
Console.WriteLine("Result Left = {0}, Right = {1}, Key = {2}", l, r, key);
Console.ReadLine();
}
}
}
При выполнении программы обнаруживается следующее:


На 3-ем раунде (под номером 2) данные становятся идентичными начальным значениям - и так затем каждые 3 раунда. Хотя по идее так быть не должно - чем больше раундов шифрования, тем лучше.
Компилятор - Visual Studio 2008, Microsoft.Net Framework 3.5

Также пытался найти информацию по алгоритму Файстеля с зацеплением - нигде не нашёл детальное описание самого алгоритма, только неясные намёки как он должен работать. Кто может подсказать, где я могу найти такую информацию, пожалуйста подскажите.