Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Алгоритм шифрования WAKE - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сформировать произвольную матрицу http://www.cyberforum.ru/cpp-beginners/thread722826.html
Дано натуральное число N. Сформировать произвольную матрицу размерностью NxN. Найти минимальный из элементов, расположенных под главной диагональю, и максимальный из элементов, расположенных над...
C++ Динамические массивы (проверка ввода, заполнение числами, вывод на экран) Создать динамический массив, размер запросить у пользователя. Сделать проверку на возможность выделения заданного количества памяти. Заполнить случайными числами, вывести на экран. Заполнить все... http://www.cyberforum.ru/cpp-beginners/thread722824.html
Сформировать матрицу, найти наибольшее среди средних арифметических элементов ее строк C++
Сформировать матрицу размером MxN и найти наибольшее среди средних арифметических элементов ее строк. Заранее большое спасибо!
Найти максимальный из отрицательных элементов массива с четными индексами C++
Найти максимальный из отрицательных элементов массива с четными номерами (с учетом того что их может не быть). Заранее спасибо!
C++ Считывание данных из файла http://www.cyberforum.ru/cpp-beginners/thread722807.html
char y; ifstream fin; fin.open("maps1.txt"); fin >> y; fin.close(); cout << y; Почему-то не работает следующий код. В переменную ничего не считывается. В чем ошибка? Работаю в VS 2012...
C++ найти ошибку в коде Дана непустая последовательность слов (не более 50), в каждом слове не более восьми символов. Слова разделены пробелом, за последним словом точка. Найти те слова, которые отличаются от последнего... подробнее

Показать сообщение отдельно
komarov
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 6

Алгоритм шифрования WAKE - C++

07.12.2012, 14:52. Просмотров 811. Ответов 0
Метки (Все метки)

Пытаюсь реализовать алгоритм шифрования WAKE, нашел сайт, где функции вроде бы описаны, но не могу разобраться, как их применять, так же есть исходник, где видимо пытались реализовать алгоритм, но он тоже не работает, может кто-нибудь помочь?

Вот сайт: http://www.cix.co.uk/~klockstone/wake.htm

Исходник:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <stdio.h>
 
using namespace std;
void cypher (long V[],long n,long k[],long r[],long t[]);
void genkey (long t[], long k[]);
 
int main()
{
    
    long V[7], n, k[4], r[6], t[256];
    int j = 1;
    n = -4;
    for (int i = 1; i<7; i++) 
    r[i] = rand()%10;
    for (int count = 0; count < 4; count ++)
    {
    k[count] = rand()%512;
}
    for (int count_t = 0; count_t < 256; count_t ++){
        t[count_t] = rand()%255;
        cout << "t= " << t[count_t] << "\n";
        }
    
    V[0] = 1;
    V[1] = 3;
    V[2] = 5;
    V[3] = 7;
    V[4] = 21;
    V[5] = 43;
    V[6] = 12;
    V[7] = 17;
    
    genkey (t, k);
    cypher (V,n,k,r,t);
    for(int i = 0; i <=7; i++)
    cout << V[i] << "\t";
    n = -4;
    cout << "\n\n";
    cypher (V,n,k,r,t);
    for(int i = 0; i <=7; i++)
    cout << V[i] << "\t";
    system ("PAUSE");
    
    return 0;
}
 
void cypher (long V[],long n,long k[],long r[],long t[]){
long r1,r2,r3,r4,r5,r6,d,*e,m=0x00ffffff ;
 
r3=k[0] ; r4=k[1] ; r5=k[2] ; r6=k[3] ;
if (n<0) d= -1 ; else d=1 ;
e=V+n ;
while (V-e) {
 r1 = *V ;
 r2 = r1^r6 ;
 *V = r2 ; // Change into r1 for decoding.
 V += d ;
 r3 = r3+r2 ;
 r3 = (r3>>8&m)^t[r3&255] ;
 r4 = r4+r3 ;
 r4 = (r4>>8&m)^t[r4&255] ;
 r5 = r5+r4 ;
 r5 = (r5>>8&m)^t[r5&255] ;
 r6 = r6+r5 ;
 r6 = (r6>>8&m)^t[r6&255] ; }
r[0] =r3 ; r[1]=r4 ; r[2]=r5 ; r[3]=r6 ; }
 
 
void genkey (long t[], long k[]){
long x, z, p ;
static long tt[10]= {
0x726a8f3b,                                 // table
0xe69a3b5c,
0xd3c71fe5,
0xab3c73d2,
0x4d3a8eb3,
0x0396d6e8,
0x3d4c2f7a,
0x9ee27cf3, } ;
for (p=0 ; p<4 ; p++) t[p]=k[p] ;          // copy k
for (p=4 ; p<256 ; p++) {
  x=t[p-4]+t[p-1] ;                        // fill t
  t[p]=x>>3 ^ tt[x&7] ; }
 
for (p=0 ; p<23 ;
 p++) t[p]+=t[p+89] ;           // mix first entries
x=t[33] ; z=t[59] | 0x01000001 ;
z=z&0xff7fffff ;
for (p=0 ; p<256 ; p++) {       //change top byte to
  x=(x&0xff7fffff)+z ;          // a permutation etc
  t[p]=t[p] & 0x00ffffff ^ x ; }
 
t[256]=t[0] ; x&=255 ;
for (p=0 ; p<256 ; p++) {     // further change perm.
  t[p]=t[x=(t[p^x]^x)&255] ;  // and other digits
  t[x]=t[p+1] ;  }     }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru