К основному контенту

Алгоритм для аутентефикации HMAC C++

Пора двигаться в направлении разработки относящейся непосредственно к моей специальности, а именно - криптографии.
Не гарантирую корректность работы кода, не гарантирую ничего, это мой первый алгоритм, строго тоже не судить.
Также, попрошу не нарушить авторские права. Если вы используете мой код для чего-то, даже в учебных целях, просьба, уведомить меня или с социальных сетях, или в комментариях.
Для написания алгоритма использована библиотека sha1, из нее функция непосредственно хеширующая сообщение и функция преобразования массива hex чисел в строку для вывода на экран.
Если буден необходима эта библиотека - пишите, предоставлю.


#include "stdafx.h"
#include<iostream>
#include "sha1.h"
using namespace std;
using namespace sha1;

int _tmain(int argc, _TCHAR* argv[])
{
char text_ch [1024] = {0};
char key_ch [1024] = {0};
cout << "****HMAC****" << endl;
cout << "Enter text" << endl;
cin.getline(text_ch, 1024);
cout << "Enter key" << endl;
cin.getline(key_ch, 1024);

//1//
char K0[64] = {0};
if((strlen(key_ch) == 64) || (strlen(key_ch) < 64))
{
for (int i = 0; i<strlen(key_ch); i++)
K0[i] = key_ch[i];
}
if (strlen(key_ch) > 64)
{
unsigned char K0Sha1[20];
calc(key_ch, strlen(key_ch), K0Sha1);
for (int i = 0; i<strlen(key_ch); i++)
K0[i] = K0Sha1[i];
}

//2//
char Si[64] = {0};
for (int i = 0; i<64; i++)
Si[i] = K0[i]^0x36;

//3//
char So[64] = {0};
for (int i = 0; i<64; i++)
So[i] = K0[i]^0x5c;

//4//
char SiText_ch[1088] = {0};
for (int i = 0; i<64; i++)
SiText_ch[i] = K0[i];
for (int i = 64; i<1088; i++)
SiText_ch[i] = text_ch[i-64];

//5//
unsigned char SiText_chSha1[20];
calc(SiText_ch, 1088, SiText_chSha1);

//6//
char SoText_ch[1088] = {0};
for (int i = 0; i<64; i++)
SiText_ch[i] = SiText_chSha1[i];
for (int i = 64; i<1088; i++)
SoText_ch[i] = text_ch[i-64];

//7//
unsigned char SoText_chSha1[20];
calc(SoText_ch, 1088, SoText_chSha1);

char hexString[41];

toHexString(SoText_chSha1, hexString);

for(int i = 0; i<41; i++)
cout << hexString[i];
cout << endl;
return 0;
}

Комментарии

Популярные сообщения из этого блога

Прата С. Решение задач 6 главы

На решение этих задач у меня ушло 2 дня. Становится все интереснее и интереснее! и черт возьми, я наконец-то поняла работу с файлами! прошу прощения за корявые условия. просто в нормальном формате электронной книги у меня нет, потому скрины задач просто пропущены через Файнридер.

6 глава, Лафоре Р

*1. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализирован- ных объекта, присвойте результат третьему, а затем отобразите результат на экране.

7 глава, Лафоре Р

*1. Напишите функцию reversit(), которая переворачивает строку (массив типа char). Используйте цикл for, который меняет местами первый и последний символы, затем следующие и т. д. до предпоследнего. Строка должна пере- даваться в функцию reversit() как аргумент. Напишите программу для выполнения функции reversit(). Программа долж- на принимать строку от пользователя, вызывать функцию reversit(), а за- тем выводить полученный результат. Используйте метод ввода, который позволяет использовать внутренние пробелы. Протестируйте программу на примере фразы «Аргентина манит негра».