Уже кидал данную программу ранее, но после того раза в ней некоторые вещи изменились, поэтому опять кидаю. В общем, на этот раз компилятор ожидает ; там, где этого знака не должно быть и ругается на = . Ниже код программы. 2 одинаковые ошибки в описании
int encryptionResult(int x, int key) и int encryptionResultReverse(int x, int y) при них же в комментах там описание ошибок (постарался виделить все)
и еще одна непонятная ошибка в int main() в первой строке описания
#include <iostream>
#include <sstream>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
typedef vector<int> masInt;
//ключ
const int key = 0x4a567bed;
//начальный вектор инициализации, _H0
const int H0 = 0x2b838811;
//подстановка степени 16 _s
const int s16[] = {
11, 7, 9, 0,
8, 5, 12, 1,
2, 15, 3, 13,
14, 6, 10, 4 };
//обратная подстановка _s_reverse
const int s16Reverse[] = {
3, 7, 8, 10,
15, 5, 13, 1,
4, 2, 14, 0,
6, 11, 12, 9 };
//массив констант _C
const int consts[] = {
0x8e20faa7,
0x2ba0b470,
0x47017ddd,
0x9b505a38,
0xad08b0c0,
0xc3282d1c,
0xd8045870,
0xef14980e,
0x6c022c38,
0xf90a4c07,
0x3601161c,
0xf205268d };
//массив для выделения полубайтов hex_basis
const int hexBasis[] = {
0x0000000f,
0x000000f0,
0x00000f00,
0x0000f000,
0x000f0000,
0x00f00000,
0x0f000000,
0xf0000000 };
const int basis[] = {
0x00000001, 0x00000002, 0x00000004, 0x00000008,
0x00000010, 0x00000020, 0x00000040, 0x00000080,
0x00000100, 0x00000200, 0x00000400, 0x00000800,
0x00001000, 0x00002000, 0x00004000, 0x00008000,
0x00010000, 0x00020000, 0x00040000, 0x00080000,
0x00100000, 0x00200000, 0x00400000, 0x00800000,
0x01000000, 0x02000000, 0x04000000, 0x08000000,
0x10000000, 0x20000000, 0x40000000, 0x80000000 };
//подстановка степени 32 _pi
const int s32[] = { 0, 8, 16, 24, 1, 19, 17, 25, 2, 10, 18, 26, 3, 11, 19,
27, 4, 12, 20, 28, 5, 13, 21, 29, 6, 14, 22, 30, 7, 15, 23, 31 };
//обратная подстановка _pi_reverse
const int s32Reverse[]{
0, 4, 8, 12, 16, 20, 24, 28,
1, 5, 9, 13, 17, 21, 25, 29,
2, 6, 10, 14, 18, 22, 26, 30,
3, 7, 11, 15, 19, 23, 27, 31 };
//линейное преобразование _L
int linearTransformation(int x) {
int mas[32];
for (int i = 0; i<32; ++i) {
mas[i] = x&basis[s32[i]];
}
int L = 0;
for (int i = 0; i<32; ++i) {
L |= mas[i];
}
return L;
}
//преобразование, основанное на подстановке s16
int s16Transformation(int x) {
int mas[8];
for (int i = 0; i<8; ++i) {
mas[i] = s16[x&hexBasis[i]] & hexBasis[i];
}
int S = 0;
for (int i = 0; i<8; ++i) {
S |= mas[i];
}
return S;
}
//обратное преобразование
int s16ReverseTransformation(int x) {
int mas[8];
for (int i = 0; i<8; ++i) {
mas[i] = s16Reverse[x&hexBasis[i]] & hexBasis[i];
}
int S_reverse = 0;
for (int i = 0; i<8; ++i) {
S_reverse |= mas[i];
}
return S_reverse;
}
//преобразование по условию
int dTransformation(int j, int i) {
int S_j = s16Transformation(i);
int L_j = linearTransformation(S_j);
L_j ^= consts[j];
int S = s16Transformation(L_j);
int L = linearTransformation(S);
return L^consts[j];
}
//преобразование по условию
int fTranformation(int x, int k) {
int S = s16Transformation(x^k);
return linearTransformation(S);
}
//массив раундовых ключей
masInt keys(int key) {
masInt K(12);
//int D[12];
for (int i = 0; i<12; ++i) {
for (int j = 0; j<11; ++j) {
key = fTranformation(dTransformation(i, j), key);
}
K[i] = key^dTransformation(i, 11);
key = K[i];
}
return K;
}
//результат шифрования 32-х битного блока x на ключе k
int encryptionResult(int x, int key) {
//вот здесь он подчеркивает равно и выдает несколько ошибок
//1. expected a';'
//2. syntax error: missing ';' before '='
//3. syntax error: '='
masInt K(12) = keys(key);
for (int j = 0; j<11; ++j) {
x = fTranformation(K[j], x);
}
return K[11]^x;
}
//функция сжатия в общем виде
int functionCompression(int x, int k, int H) {
return encryptionResult(k, (x^H));
}
//вычисление H по Ex(H) = y и x
int encryptionResultReverse(int x, int y) {
//вычислим раундовые ключи x0,...,x11
//и вот здесь он подчеркивает равно и выдает несколько ошибок
//1. expected a';'
//2. syntax error: missing ';' before '='
//3. syntax error: '='
masInt X(12) = keys(x);
//вычислим H за 11 раундов
y ^= X[11];
for (int i = 0; i<12; ++i) {
y = s16ReverseTransformation(linearTransformation(y)) ^ X[10 - i];
}
return y;
}
//хэш-функция
int functionHash(masInt x) {
int H = H0;
for (int i = 0; i<x.size(); ++i) {
H = functionCompression(x[i], key, H);
}
return H;
}
//основная программа
int main() {
//также ругается на строчку ниже (хоть и не подчеркивает ее) и пишет
следующую ошибку: 'MkHexMasFromStr':indentifier not found
masInt x1_mas = MkHexMasFromStr();
//вычислим хэш сообщения
int H1 = functionHash(x1_mas);
cout << "хэш-сумма от сообщения " << H1 << endl;
//masInt x2_mas = MkHexMasFromStr();
//int H2 = functionHash(x2_mas);
return 0;
}
//преобразование строки в hex массив
masInt MkHexMasFromStr()
{
cout << "Введите x в 16-ричном виде" << endl;
string x_string;
cin >> x_string;
//дополним входное сообщение нулями
while (x_string.size() % 8 != 0) {
x_string.push_back('0');
}
masInt x_mas (x_string.size() / 8);
//создадим hex-массив
for (int i = 0; i<x_string.size(); i + 8) {
stringstream x_stream;
x_stream << hex << x_string.substr(i, i + 7); //делит массив
x_stream >> x_mas[i / 8];
}
return x_mas;
}
masInt K(12) = keys(key);
Тут вы создаете экземпляр и сразу же пытаетесь изменить значение переменной. Делайте либо так:
masInt K(12);
Либо так:
masInt K = keys(key);
С
masInt X(12) = keys(x);
Аналогично.
С ошибкой MkHexMasFromStr
. Просто поместите код
masInt MkHexMasFromStr() {
cout << "Введите x в 16-ричном виде" << endl;
string x_string;
cin >> x_string;
//дополним входное сообщение нулями
while (x_string.size() % 8 != 0) {
x_string.push_back('0');
}
masInt x_mas (x_string.size() / 8);
//создадим hex-массив
for (int i = 0; i<x_string.size(); i + 8) {
stringstream x_stream;
x_stream << hex << x_string.substr(i, i + 7); //делит массив
x_stream >> x_mas[i / 8];
}
return x_mas;
}
Перед функцией main
. Иначе в функции main
не видно вашей функции MkHexMasFromStr
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ЗдравствуйтеЯ пишу программу для определения размера строки кэша второго уровня, пользовался статьей habrahabr
Написал JavaFX приложение, в настройках проекта настроил Artifacts, и сделал Build ArtifactsJar Файл создался, но не запускается
Привет всем молодым перспективным программистамМоя проблема обстоит так: На скриншоте у меня выделен код который отвечает за(как я понял)...