Форум программистов, компьютерный форум 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 Professional, файл maps1.txt располагается в директории "название проекта"/debug.
C++ найти ошибку в коде Дана непустая последовательность слов (не более 50), в каждом слове не более восьми символов. Слова разделены пробелом, за последним словом точка. Найти те слова, которые отличаются от последнего слова и длина слов максимальная. #include<stdio.h> #include<string.h> #include<locale.h> #include<conio.h> void main() {setlocale(LC_CTYPE,"Russian"); подробнее

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

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

07.12.2012, 14:52. Просмотров 791. Ответов 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] ;  }     }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru