Форум программистов, компьютерный форум, киберфорум
Криптография
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 30

стандарт шифрования AES

08.12.2012, 20:14. Показов 2793. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите разобраться в проблеме. Написал прогу которая реализует стандарт AES, но при выполнении есть отклонение дело в том что, время которое требуется проге на то чтобы расшифровать текст в 2 раза больше, чем время которое требуется чтобы зашифровать текст. Например: время потраченное на зашифрование 1.5 миллисекунд,а время потраченное на расшифрование 2.85 миллисекунд. Согласно данным AES это блочный шифр а значит время которое на зашифрование и расшифрование должно совпадать, либо совсем немного отличаться. Прога реализована на языке CUDA C на основе технологии компании NVIDIA CUDA. Помогите найти причину по которой время на расшифрование в 2 раза больше чем время на зашифрование.
http://rghost.ru/42098530-вот файл в котором лежит весь код проги.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2012, 20:14
Ответы с готовыми решениями:

Шифр AES
Шифр AES. Пoдскaзка: ключ из 5 цифp. Шифp:...

Уточнения по AES
Всем доброго времени суток При изучении AES появилось пара вопросов, конкретные ответы на которые с помощью гугла найти не удалось,...

AES головоломка
оба комплекта цепей фактически кодируют ту же самую информацию, так что это будет достаточно, чтобы сломать либо. Мне нужна ваша помощь!...

4
85 / 80 / 15
Регистрация: 25.05.2012
Сообщений: 230
Записей в блоге: 3
09.12.2012, 22:42
Цитата Сообщение от Naruto88 Посмотреть сообщение
Согласно данным AES это блочный шифр а значит время которое на зашифрование и расшифрование должно совпадать, либо совсем немного отличаться. Прога реализована на языке CUDA C
Ну и что с того что АЕС блочный? Блочный и время выполнения конкретной программной реализации АЕС не связаны.
Блочный потому что работает с блоками бит - 128 бит = 16 байт.

То что они у тебя не совпадают - говорит лишь о том что эта твоя программа на КУДА Си написана не оптимально.
И поэтому беда не в самом алгоритме, а в том как ты его реализовал в виде программы.
0
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 30
09.12.2012, 23:00  [ТС]
Здравствуйте! вы можете сказать как сделать правильно
0
85 / 80 / 15
Регистрация: 25.05.2012
Сообщений: 230
Записей в блоге: 3
10.12.2012, 00:04
Цитата Сообщение от Naruto88 Посмотреть сообщение
Здравствуйте! вы можете сказать как сделать правильно
Вам в раздел "программирование С".
(я с технологией КУДА С не знаком, уж извините).
0
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 30
13.12.2012, 10:48  [ТС]
Подскажите как переделать функцию. На данный момент у меня ключ генерируется из двух блоков по 64. нужно сделать так чтобы можно было с клавиатуры вводить 128-битный ключ для того чтобы с помощью него шифровать и расшифровывать ИНФОРМАЦИЮ
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
__host__ void h_generateCipherKey128( uchar4 *result, uint64_t block1, uint64_t block2 )
{
    for (int i = 0; i < 2; ++i) {
        result[i + 0].x = (block1 >> (56 - 32*i)) & 0xFF;
        result[i + 0].y = (block1 >> (48 - 32*i)) & 0xFF;
        result[i + 0].z = (block1 >> (40 - 32*i)) & 0xFF;
        result[i + 0].w = (block1 >> (32 - 32*i)) & 0xFF;
        
        result[i + 2].x = (block2 >> (56 - 32*i)) & 0xFF;
        result[i + 2].y = (block2 >> (48 - 32*i)) & 0xFF;
        result[i + 2].z = (block2 >> (40 - 32*i)) & 0xFF;
        result[i + 2].w = (block2 >> (32 - 32*i)) & 0xFF;
    }
}
 
__host__ /*inline*/ uchar4 * d_generateCipherKey128( uint64_t block1, uint64_t block2 )
{
    uchar4 *d_cipher_key;
    uchar4 *h_cipher_key = (uchar4 *) malloc(4 * sizeof(uchar4));
    
    // Создает ключ шифрования на хосте из двух блоков uint64_t
    h_generateCipherKey128(h_cipher_key, block1, block2);
    
    // Выделяет память для ключа шифрования устройства, копирование хозяина к ней
    cudaMalloc((void **) &d_cipher_key,    4 * sizeof(uchar4));
    cudaMemcpy(d_cipher_key, h_cipher_key, 4 * sizeof(uchar4), cudaMemcpyHostToDevice);
    
    // Освобождает память, используемая для временного ключа шифра принимающей
    free(h_cipher_key);
    
    return d_cipher_key;
}
__host__ void nouveau128( int argc, char *argv[] ) {
    uchar4 *h_round_keys;
    uchar4 *d_cipher_key, *d_round_keys;
    uint8_t *d_sbox, *d_inv_sbox;
    char *h_file;
    char *d_file;
    size_t file_size;
    char fname[80],fname1[80], fname2[80];
    
    // Создание 128-битный шифр-ключ из двух uint64_t
    d_cipher_key = d_generateCipherKey128( 0x95A8EE8E89979B9E, 0xFDCBC6EB9797528D );
    printf("Enter src file name: ");
    gets_s(fname);
    
    // Загружает файл с диска
    file_size = loadFileIntoMemory(&h_file, fname);
    
    // Выделяет память для различных ресурсов
    h_round_keys = (uchar4 *) malloc(11 * 4 * sizeof(uchar4));
    cudaMalloc((void **) &d_round_keys, 11 * 4 * sizeof(uchar4));
    cudaMalloc((void **) &d_sbox, 256 * sizeof(uint8_t));
    cudaMalloc((void **) &d_inv_sbox, 256 * sizeof(uint8_t));
    cudaMalloc((void **) &d_file, file_size * sizeof(char));
    
    // Копии памяти на устройстве
    cudaMemcpy(d_sbox, s_box, 256 * sizeof(uint8_t), cudaMemcpyHostToDevice);
    cudaMemcpy(d_inv_sbox, inv_s_box, 256 * sizeof(uint8_t), cudaMemcpyHostToDevice);
    cudaMemcpy(d_file, h_file, file_size * sizeof(char), cudaMemcpyHostToDevice);
    
    
    // Создает вокруг ключи, сохраняя их на глобальной памяти
    d_round_keys = d_expandKey128( d_cipher_key, d_sbox );
 
    
    // Шифрование файлов
    h_file = encryptHostToHost128(h_file, file_size, d_sbox, d_round_keys);
    printf("Enter dst file name: ");
    gets_s(fname1);
    //Записывает зашифрованный файл на диске
    writeToFile(h_file, fname1, file_size);
    
    
    // Расшифровка файлов
    h_file = decryptHostToHost128(h_file, file_size, d_inv_sbox, d_round_keys);
    printf("Enter res file name: ");
    gets_s(fname2);
    //Пишет расшифрованный файл на диск
    writeToFile(h_file, fname2, file_size);
    
    
    // Освобождает память, которая больше не используется
    free(h_round_keys);
    free(h_file);
    cudaFree(d_cipher_key);
    cudaFree(d_round_keys);
    cudaFree(d_inv_sbox);
    cudaFree(d_sbox);
    cudaFree(d_file);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2012, 10:48
Помогаю со студенческими работами здесь

Легковесный AES
Всем привет. Заранее извиняюсь за дурацкий вопрос, но боюсь без помощи мне не обойтись Не так давно находил несколько статей...

AES шифр
Строка зашифрована в AES Не могу никак найти первоначальный вид зашифрованной строки ...

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

Алгоритм шифрования AES-128
Здравствуйте программисты!!! :) Подскажите пожалуйста, или покажите какой-то пример реализации алгоритма шифрования AES-128. Слышал что...

Получение ключа для AES шифрования из строки
Здравствуйте, есть строка в формате string, имеющая 32 символа (хеш md5). Нужно эту строку преобразовать в byte 128bit, для использования в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru