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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обработчик исключений http://www.cyberforum.ru/cpp-beginners/thread876637.html
Помогите написать обработчик исключений по заданию: Опишите функцию анализа номера телефона, обработайте ошибку задания номера в неверном формате (допустимый формат - +7(095)555-44-33).
C++ Не работают функции! Не работатает функция pushback(добавление в конец дека) и removez(удаления последнего элемента дека) Помогите плз! #include <iostream.h> #include <stdio.h> struct shop { int number; char nazvanie; http://www.cyberforum.ru/cpp-beginners/thread876635.html
C++ Найти самую большую цепочку возрастающих элементов последовательности
задание:найти самою большую цеп цилих чисел, в 1-масиве, что создают зростаюшею последовательностю та сместить таким образом, что-би min елемент стал на 1 место.(показ всем елементов сразу) пример:2 5 4 1 2 5 1 0 1 2 3 5 9 1 ответ:1 2 3 5 9 1 2 5 4 1 2 5 1 0 # include <iostream> # include <math.h> # include <time.h> using namespace std; int mesto(int* mas, int z, int n) { int x=0; ...
С++.Подражание, полиморфизм C++
Издательство осуществляет выпуск книг, журналов и открыток. Для книги указывается код, автор, название, гонорар автору, количество страниц, стоимость печати страницы, количество экземпляров. Для журнала - название, количество страниц, метод печати, стоимость страницы для каждого метода, количество экземпляров. Для открытки - название, формат (ширина и высота), стоимость печати 1 см2, количество...
C++ Обработка матрицы (подсчёта определителя, ранга и транспонирование) http://www.cyberforum.ru/cpp-beginners/thread876623.html
Может кто поделиться функциями подсчёта определителя, ранга и транспонирования матрицы? Очень надо :sorry:
C++ Ввод-вывод файлов подскажите код программы, которая считывает числа из файла и выводит эти же числа в другой файл в обратном порядке подробнее

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

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

24.05.2013, 01:46. Просмотров 1642. Ответов 1
Метки (Все метки)

При построении решения, ошибок не выдает. Все работает. Вопрос вот в чем: при шифровании даже одной буквы, шифр текст выводится длиной 64 символа. При шифровании двух букв - так же и т.д. Но меняются лишь первые 16 символов, следующие всегда остаются одинаковыми. Не могу понять это ошибка? И разве шифр текст по длине не должен быть равен исходному тексту?

Например(исходный текст - шифр):
a - 11b69c7592fc8f508f90d87169c3e5528f90d87169c3e5528f90d87169c3e552
aa - 2273e48f111bfbcd8f90d87169c3e5528f90d87169c3e5528f90d87169c3e552
0 - aeec27833e9a9d438f90d87169c3e5528f90d87169c3e5528f90d87169c3e552
hello, world! - f468735bdfa7ca5f8f90d87169c3e5528f90d87169c3e5528f90d87169c3e552 (и в этом случае расшифровывает только текст до пробела: hello,)

программный текст:
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
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <stdint.h>
using namespace std;
 
 
unsigned int key[4]={0xFDA5,0xD54E,0xFC00,0xB55A}; // encryption key
 
#define BLOCK_SIZE 8
void xtea_encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
    for (i=0; i < num_rounds; i++) {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
        sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
    }
    v[0]=v0; v[1]=v1; 
 
 
}
 
void xtea_decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
    for (i=0; i < num_rounds; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
    }
    v[0]=v0; v[1]=v1;
}
void StringCrypt(char *inout,int len,bool encrypt)
{
  for(int i=0;i<len/BLOCK_SIZE;i++)
    {
      if(encrypt)
          xtea_encipher(32,(uint32_t*)(inout+(i*BLOCK_SIZE)),key);
      else
          xtea_decipher(32,(uint32_t*)(inout+(i*BLOCK_SIZE)),key);
    }
  if(len%BLOCK_SIZE!=0)
    {
        int mod=len%BLOCK_SIZE;
        int offset=(len/BLOCK_SIZE)*BLOCK_SIZE;
        char data[BLOCK_SIZE];
        memcpy(data,inout+offset,mod);
 
        if(encrypt)
            xtea_encipher(32,(uint32_t*)data,key);
        else
            xtea_decipher(32,(uint32_t*)data,key);
 
        memcpy(inout+offset,data,mod);
    }
}
 
 
  int main()
{
    char str[32]= {0};
cout<<"Enter a text to crypt: ";
cin>>str;
cout<<endl;
int len=sizeof(str);
 
StringCrypt(str,len,true);
int i2[32];
cout.unsetf(ios::dec);
cout.setf(ios::hex);
cout<<"Encrypted string: ";
for(int i=0;i<len;i++)
{
i2[i] = (unsigned char)str[i];
cout<<i2[i];
}
cout<<endl;
 
StringCrypt(str,len,false);
 
cout<<"Decrypted string: ";
cout<<str<<endl;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru