Нужен простой исходник шифрования на C
От:
Аноним
Дата: 24.09.04 06:22
Оценка:
Здравствуйте!
Можете ли кто-нибудь поделиться ссылкой на реализацию ЛЮБОГО СИММЕТРИЧНОГО алгоритма шифрования (ну разве что кроме XOR), имеющего нормальные функции шифровки/расшифровки, типа этого:
char * encrypt (char * inData, int dataLen, char * key)
Заранее спасибо.
P.S. Можно и на мыло Anvaspm@mail.ru
29.09.04 00:47: Перенесено модератором из 'C/C++' — Павел Кузнецов
18.10.04 02:58: Перенесено модератором из 'Прочее' — Павел Кузнецов
Re: Нужен простой исходник шифрования на C
От:
MaximE
Дата: 24.09.04 06:40
Оценка:
> Можете ли кто-нибудь поделиться ссылкой на реализацию ЛЮБОГО СИММЕТРИЧНОГО алгоритма шифрования (ну разве что кроме XOR), имеющего нормальные функции шифровки/расшифровки, типа этого:
google -> "c source code" (block | stream) cipher
--
Maxim Yegorushkin Posted via RSDN NNTP Server 1.9 gamma
Re: Нужен простой исходник шифрования на C
Здравствуйте, Аноним, Вы писали:
А>Можете ли кто-нибудь поделиться ссылкой на реализацию ЛЮБОГО СИММЕТРИЧНОГО алгоритма шифрования (ну разве что кроме XOR)
Поиск на
The Code Project по слову "crypt" даст Вам массу ссылок.
Re: Нужен простой исходник шифрования на C
А я, пожалуй, исходничек дам...
#include <ctype.h>
#include <string.h>
/******************************************************************************************/
// Шифрование и дешифрование строки простым потоковым алгоритмом на базе CRC8
/******************************************************************************************/
static const unsigned char crct[] = {
0x00,0x5E,0xBC,0xE2,0x61,0x3F,0xDD,0x83,0xC2,0x9C,0x7E,0x20,0xA3,0xFD,0x1F,0x41,
0x9D,0xC3,0x21,0x7F,0xFC,0xA2,0x40,0x1E,0x5F,0x01,0xE3,0xBD,0x3E,0x60,0x82,0xDC,
0x23,0x7D,0x9F,0xC1,0x42,0x1C,0xFE,0xA0,0xE1,0xBF,0x5D,0x03,0x80,0xDE,0x3C,0x62,
0xBE,0xE0,0x02,0x5C,0xDF,0x81,0x63,0x3D,0x7C,0x22,0xC0,0x9E,0x1D,0x43,0xA1,0xFF,
0x46,0x18,0xFA,0xA4,0x27,0x79,0x9B,0xC5,0x84,0xDA,0x38,0x66,0xE5,0xBB,0x59,0x07,
0xDB,0x85,0x67,0x39,0xBA,0xE4,0x06,0x58,0x19,0x47,0xA5,0xFB,0x78,0x26,0xC4,0x9A,
0x65,0x3B,0xD9,0x87,0x04,0x5A,0xB8,0xE6,0xA7,0xF9,0x1B,0x45,0xC6,0x98,0x7A,0x24,
0xF8,0xA6,0x44,0x1A,0x99,0xC7,0x25,0x7B,0x3A,0x64,0x86,0xD8,0x5B,0x05,0xE7,0xB9,
0x8C,0xD2,0x30,0x6E,0xED,0xB3,0x51,0x0F,0x4E,0x10,0xF2,0xAC,0x2F,0x71,0x93,0xCD,
0x11,0x4F,0xAD,0xF3,0x70,0x2E,0xCC,0x92,0xD3,0x8D,0x6F,0x31,0xB2,0xEC,0x0E,0x50,
0xAF,0xF1,0x13,0x4D,0xCE,0x90,0x72,0x2C,0x6D,0x33,0xD1,0x8F,0x0C,0x52,0xB0,0xEE,
0x32,0x6C,0x8E,0xD0,0x53,0x0D,0xEF,0xB1,0xF0,0xAE,0x4C,0x12,0x91,0xCF,0x2D,0x73,
0xCA,0x94,0x76,0x28,0xAB,0xF5,0x17,0x49,0x08,0x56,0xB4,0xEA,0x69,0x37,0xD5,0x8B,
0x57,0x09,0xEB,0xB5,0x36,0x68,0x8A,0xD4,0x95,0xCB,0x29,0x77,0xF4,0xAA,0x48,0x16,
0xE9,0xB7,0x55,0x0B,0x88,0xD6,0x34,0x6A,0x2B,0x75,0x97,0xC9,0x4A,0x14,0xF6,0xA8,
0x74,0x2A,0xC8,0x96,0x15,0x4B,0xA9,0xF7,0xB6,0xE8,0x0A,0x54,0xD7,0x89,0x6B,0x35
};
static unsigned char docrc (unsigned char data, unsigned char crc)
{
return crct[crc^data];
}
static unsigned char recrc (unsigned char cur, unsigned char prev)
{
unsigned char i;
const unsigned char *ptr;
ptr=crct;
i=0;
while (ptr[i]!=cur) i++;
return (i^prev);
}
static unsigned char a2x(char *tbuf)
{
unsigned char res=0;
if ( isxdigit(tbuf[0]) && isxdigit(tbuf[1]) )
{
if ( isalpha(tbuf[1]))
{
res=0x0A+(tbuf[1]-'A');
}
else res=tbuf[1]-'0';
if ( isalpha(tbuf[0]) )
{
res=res│((0x0A+(tbuf[0]-'A'))<<4);
}
else res=res│((tbuf[0]-'0')<<4);
}
return res;
}
//Шифрование строки
//str — указатель на шифруемую строку
//result — указатель на буфер для результата шифрования (размер — не менее ((длина строки*2)+1) )
void cypherstr (char *result, char *str)
{
char cv;
*result='\0';
if(*str=='\0') return;
if(strlen(str)==1) cv=0x38;
else cv=str[strlen(str)-1]; //Исходное значение — последний символ строки!
while (*str!='\0')
{
cv=docrc(*str,cv);
unsigned long tb = (cv>>4)&0x0F;
if (tb<0x0A) tb+='0';
else tb=tb-10+'A';
*result++ = (char)tb;
tb = cv&0x0F;
if (tb<0x0A) tb+='0';
else tb=tb-10+'A';
*result++ = (char)tb;
*result = '\0';
str++;
}
}
//Дешифровка строки
//str — указатель на зашифрованную строку
//result — указатель на буфер для результата (размер — не меньше, чем длина строки / 2)
void decypherstr (char *result, char *str)
{
int len, i;
char *ptr;
char cv, tmc;
*result='\0';
if(*str=='\0') return;
len=strlen(str);
ptr=result;
for ( i=0; i<len; i+=2)
{
if ( isxdigit(str[i]) )
{
*ptr=a2x(&str[i]);
ptr++;
}
else break;
}
*ptr='\0';
if (ptr==result) return;
ptr--;
tmc=0;
while(ptr!=result)
{
cv = *ptr;
ptr--;
cv = recrc(cv,*ptr);
ptr++;
*ptr = cv;
if (tmc==0) tmc=cv;
ptr--;
}
if(len==2) tmc=0x38;
cv=recrc(*ptr,tmc);
*ptr=cv;
}
Re: Нужен простой исходник шифрования на C
Re: Нужен простой исходник шифрования на C
Здравствуйте, Аноним, Вы писали:
А>Можете ли кто-нибудь поделиться ссылкой на реализацию ЛЮБОГО СИММЕТРИЧНОГО алгоритма шифрования (ну разве что кроме XOR), имеющего нормальные функции шифровки/расшифровки, типа этого:
А>char * encrypt (char * inData, int dataLen, char * key)
вот
здесь есть
pdf с исходными кодами к книге "Прикладная криптография" Б. Шнайера, там DES, LOKI91, IDEA, GOST, BLOWFISH, 3-WAY, RC5, A5, SEAL, всё на C.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить