Меню сайта
Категории раздела
HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Наш опрос
Друзья сайта
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » c++ |
Практический пример использования битовых операций
Приведенный ниже пример представлен для приобретения навыков работы с битовыми операциями. Сам алгоритм шифрования, описанный в примере, слабоват для практического использования хотя бы из-за малой длины ключа (ключ может принимать только 255 значений). // Шифрование / дешифрование данных #include <iostream.h> #include <stdlib.h> #include <time.h> #include <string.h> // Размер типа char в битах // sizeof(char) << 3 - размер типа данных char * 23 const SizeOfCharInBits = sizeof(char) << 3; // Создание синонима для существующего типа данных typedef unsigned char uchar; // Функция, осуществляющая циклический // побитовый сдвиг вправо ключа на один разряд void RotateRight(uchar & key) { // Выделяем младший разряд uchar mask = key & 1; // Осуществляем сдвиг key >>= 1; // Ставим выделенный бит в старший разряд key |= mask << (SizeOfCharInBits - 1); } // Функция, осуществляющая циклический // побитовый сдвиг влево ключа на один разряд void RotateLeft(uchar & key) { // Выделяем старший разряд uchar mask = key & (1 << (SizeOfCharInBits - 1)); // Осуществляем сдвиг key <<= 1; // Ставим выделенный бит в младший разряд key |= mask >> (SizeOfCharInBits - 1); } // Функция, осуществляющая шифрование строки int Crypt(char * str) { // Для одноразового вызова функции srand() static bool firsttime = 0; if(!firsttime) { srand(time(NULL)); firsttime = 1; } // Максимальное значение для типа unsigned char int maxchar = (1 << SizeOfCharInBits) - 1; // Случайный ключ uchar key = (char)(rand() % maxchar + 1); // Длина строки int len = strlen(str); for(int i = 0; i < len; i++) { // Шифрование очередного символа str[i] ^= key; // Изменение ключа RotateRight(key); } // Возврат ключа return (int)key; } // Функция, осуществляющая дешифрование строки // startkey - ключ, который вернула функция Crypt void EnCrypt(char * str, int startkey) { // Преобразование ключа к типу unsigned char uchar key = (uchar)startkey; // Длина строки int len = strlen(str); for(int i = len - 1; i >= 0; i--) { // Изменение ключа RotateLeft(key); // Дешифрование очередного символа str[i] ^= key; } } void main() { char str[] = "Hello, World!!!"; cout << "Start string: " << str << endl; int key = Crypt(str); cout << "Crypted string: " << str << endl; EnCrypt(str, key); cout << "Encrypted string: " << str << endl; } | |
Просмотров: 1688 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |