Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 24.05.2013
Сообщений: 7
1

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

24.05.2013, 01:46. Показов 5633. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При построении решения, ошибок не выдает. Все работает. Вопрос вот в чем: при шифровании даже одной буквы, шифр текст выводится длиной 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2013, 01:46
Ответы с готовыми решениями:

Алгоритм шифрования RC4
не могу понять,что такое такое алгоритм шифрования RC4. (и если можно его реализацию). очень надо!

алгоритм шифрования MISTY1
Здравствуйте, у кого есть исходник misty1 желательно рабочий - поделитесь пожалуйста, просто в...

Алгоритм шифрования DES
Требуется написать программу реализующую симметричный алгоритм шифрования DES. В Инете много...

Алгоритм шифрования Serpent
Есть код алгоритма Serpent, но при запуске выдает ошибку: &quot;String subscript out of range&quot;. В силу...

1
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
24.05.2013, 13:40 2
ну так гугл в помощь. искать какой принцип работу именно у данного алгоритма. есть разные типы шифраторов. есть те, которые строят:
1. хеши - последовательность символов на входе (любая длина) - последовательность символов на выходе (определенная длина, например 64 бита);
2. те которые кодируют последовательности, например гаммой - сколько символов на входе, столько символов на выходе + плюс ключ гамма;
3. те которые кодируют последовательности блоками, зависящими/независящими от предыдущих. на входе последовательность любая, на выходе блоки, целые или обрезанные в конце.
мне на самом деле лень читать ваш алгоритм, но закодил я их года два назад целую кучу.
ну на вскидку у вас третий тип. то что получается одинаковый хвост - может быть как правильно так и не правильно смотря что за алгоритм
а вообще ручка + бумажка + алгоритм = счастье
0
24.05.2013, 13:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2013, 13:40
Помогаю со студенческими работами здесь

Алгоритм шифрования RSA
х*17(mod 84)=1 найти х Написать на с++

Алгоритм шифрования Anubis
Приветствую! Заранее прошу прощения за нубскую просьбу: нужно применить готовые функции. Нашел...

Алгоритм шифрования AES
Всем доброго времени суток! Господа, прошу помочь определиться с тем как более правильно...

Алгоритм шифрования Рабина
Привет всем! :) Очень нужен исходник на С++ или С# для алгоритма шифрования/дешифрования Рабина....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru