Передо мной стоит задача реализовать алгоритм SEAL2.0.
Если вкратце, то на вход из файла подается 160 символьное слово, оно делится на 5 чисел шестнадцатеричной системы счисления по 32 символа. Далее происходят разные манипуляции с этими шестнадцатеричными числами: циклический сдвиг, побитовое логическое умножение, побитовое логическое сложение и т.д.
Я знаю, что Си поддерживает побитовые операции, шестнадцатеричные числа и может работать с ними. То есть можно сделать так:
char a,b,c;
a=0x2f;
b=0x1c;
c=a&b;// поразрядное "И"
Вопрос, можно ли как то использовать встроенные побитовые операции для больших шестнадцатеричных чисел в 32 знака? В каком формате тогда хранить такие большие числа, что бы с ними можно было работать?
Если речь идет о потоковом криптоалгоритме SEAL, то ТС имеет ввиду 32-х битовые числа
Очевидно у ТС непонимание, того, что с точки зрения процессора 16-тиричное или 10-тичное число это всего лишь представление для удобства человека и не более того. Процессор в любом случае оперирует с битами.
Соответственно в зависимости от используемого компилятора/архитектуры надо выбрать способ хранения 32-х битовых чисел. Примерно так:
Windows(IA-32): unsigned long int
Windows (Intel 64): unsigned long int
Windows (IA-64): unsigned long int
Linux (IA-32): unsigned long int
Linux (Intel 64): unsigned short int
Linux (IA-64): unsigned short int
Mac OS X (IA-32): unsigned long int
Mac OS X (Intel 64): unsigned short int
Далее уже спокойно производить битовые манипуляции с нужными типами.
P.S. Никогда не реализуйте криптографические примитивы самостоятельно - никогда! Впрочем, ТС это видимо не указ :) - может такой у него курсач или дипломная работа?
не бейте сразу я плохо вопрос наверно понял но все же выложу свой код
#include <iostream>
#include <bitset>
#include <string>
using namespace std;
int main(){
// эмуляция файла
string file("dsfdskfjksdjfjsdfkldjsfjsdfjsdfdidfsdhfjsdjfdsfdshfdhfgggfdgfdgdfgdfgdfgdfgdfrterghjghjhjhjghjhgjghjghfbvgrfhythgfhgfhgfhgfhtrhytrhgfhgfhhythjgngnjghjghjhgjdff");
bitset<32> b1, b2, b3, b4, b5, result;
for (size_t i = 0; i <= file.size() - 5; i += 5){
b1 = file[i];
b2 = file[i + 1];
b3 = file[i + 2];
b4 = file[i + 3];
b5 = file[i + 4];
cout << "1: " << b1 << "\thex: " << hex << b1.to_ulong() << dec << "\t\tdec: " << dec << b1.to_ulong() << endl;
cout << "2: " << b2 << "\thex: " << hex << b2.to_ulong() << dec << "\t\tdec: " << dec << b2.to_ulong() << endl;
cout << "3: " << b3 << "\thex: " << hex << b3.to_ulong() << dec << "\t\tdec: " << dec << b3.to_ulong() << endl;
cout << "4: " << b4 << "\thex: " << hex << b4.to_ulong() << dec << "\t\tdec: " << dec << b4.to_ulong() << endl;
cout << "5: " << b5 << "\thex: " << hex << b5.to_ulong() << dec << "\t\tdec: " << dec << b5.to_ulong() << endl;
cout << "----" << endl;
result = b1 | b2 | b3 | b4 | b5;
cout << "example1 ----> 1 | 2 | 3 | 4 | 5 = " << result << endl;
result = b1 & b2 & b3 & b4 & b5;
cout << "example2 ----> 1 & 2 & 3 & 4 & 5 = " << result << endl;
cout << "-------------------------------------------------------------------" << endl;
}
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть код в maincpp, который описывает форму программы
Скажите, пожалуйста, есть ли какая-то видимая разница в работе 2-х функций?