Пора двигаться в направлении разработки относящейся непосредственно к моей специальности, а именно - криптографии.
Не гарантирую корректность работы кода, не гарантирую ничего, это мой первый алгоритм, строго тоже не судить.
Также, попрошу не нарушить авторские права. Если вы используете мой код для чего-то, даже в учебных целях, просьба, уведомить меня или с социальных сетях, или в комментариях.
Для написания алгоритма использована библиотека 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;
}
Не гарантирую корректность работы кода, не гарантирую ничего, это мой первый алгоритм, строго тоже не судить.
Также, попрошу не нарушить авторские права. Если вы используете мой код для чего-то, даже в учебных целях, просьба, уведомить меня или с социальных сетях, или в комментариях.
Для написания алгоритма использована библиотека 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;
}
Комментарии
Отправить комментарий