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

Алгоритм для аутентефикации 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 дня. Становится все интереснее и интереснее! и черт возьми, я наконец-то поняла работу с файлами! прошу прощения за корявые условия. просто в нормальном формате электронной книги у меня нет, потому скрины задач просто пропущены через Файнридер.

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

Эта глава по циклам меня удивила. я  с неким пренебрежением отнеслась к ней, т.к. думала что и так все знаю по этой теме. но Прата так глубоко и в подробностях объяснил тему, что я заново переосмыслила циклы и выражения. было очень много интересных подробностей, которые мне никто не мог толком объяснить. и кстати, парочка задач была над которыми я поломала голову. особенно понравился такой акцент на указателях. как говорится, приучают с малых лет. понять - поняла, но путаюсь в них до сих пор нечеловечески.

Прата С. Решение 3 и 4 главы

Повторюсь, взяла только интересные мне задания, т.е. с элементами того что поняла плохо/не встречала ранее. Сделала за сегодня. с удовольствием отмечаю что сдвиги  в положительную сторону  хотя-бы в стиле есть . в 4 главе ясно объяснено почему при вводе нескольких строк начинаются проблемы, и как этого избежать, подробно описана работа с входным потоком. Как работать со строками стиля Си и класса String, разница. для себя я сделала выводы что лучше всего, конечно-же класс string. намного меньше мороки. и метод ввода getline в обоих случаях. в задачах разница проиллюстрирована. и кстати, указатели больше не вызывают у меня ужаса и трепета. много нового узнала о видах структур. эта глава расставила все по местам в моей голове. правда, зачем в задачи на СР втиснута работа с массивом array - загадка. он ведь толком не объяснен, но понять его интуитивно можно, правда, зачем его использовать не зная тонкостей, как обычный массив с немного иным объявле...