![]() |
шифрование
здасте.
не подкинете код для зашифровки текста? я в это деле новечок... попородробней плиз? пасиба |
Пример тупой шифровки xor'ом
Код:
For i:=1 to length(str) do str[i]:=chr(ord(str[i]) xor key); |
Вот из Книги "Делфи на примерах" (блокнот шифровальщик):
_http://antisploa.narod.ru/Chapter_07.rar |
спс
|
если хошь здеся лежит "почти" российский ГОСТ(стандарт шифрования)
#include <vcl.h> #include <stdio.h> #include <conio.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" union transform { unsigned __int64 X[4]; unsigned int _h[8]; unsigned short _s[16]; unsigned char ch[32]; }Y; void crypt(unsigned int*n1,unsigned int*n2,unsigned long *k); void multi(unsigned char*x,unsigned char *l); void prisvUV(unsigned char *h,unsigned char *m); void calc_key(unsigned char *u,unsigned char *v); void A(unsigned char *u); void preobr_KSI(transform*f,int kol); void prost_zam(unsigned char*h); void Hshag(unsigned char*h,unsigned char*m); void k_sum(unsigned char*s1,unsigned char* s2); int readM(unsigned char* m,FILE*f); TForm1 *Form1; unsigned char U[32]={0},V[32]={0},H[32]={0},W[32]={0},L[32]={0},E[32]={0}; unsigned char K[4][32]={0}; unsigned char M[32]; unsigned char C[3][32]={{0},{0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff},{0}}; boolean openf=false; static unsigned char tab[8][16] ={ 0x4,0xA,0x9,0x2,0xD,0x8,0x0,0xE,0x6,0xB,0x1,0xC,0x 7,0xF,0x5,0x3, 0xE,0xB,0x4,0xC,0x6,0xD,0xF,0xA,0x2,0x3,0x8,0x1,0x 0,0x7,0x5,0x9, 0x5,0x8,0x1,0xD,0xA,0x3,0x4,0x2,0xE,0xF,0xC,0x7,0x 6,0x0,0x9,0xB, 0x7,0xD,0xA,0x1,0x0,0x8,0x9,0xF,0xE,0x4,0x6,0xC,0x B,0x2,0x5,0x3, 0x6,0xC,0x7,0x1,0x5,0xF,0xD,0x8,0x4,0xA,0x9,0xE,0x 0,0x3,0xB,0x2, 0x4,0xB,0xA,0x0,0x7,0x2,0x1,0xD,0x3,0x6,0x8,0x5,0x 9,0xC,0xF,0xE, 0xD,0xB,0x4,0x1,0x3,0xF,0x5,0x9,0x0,0xA,0xE,0x7,0x 6,0x8,0x2,0xC, 0x1,0xF,0xD,0x0,0x5,0x7,0xA,0x4,0x9,0x2,0x3,0xE,0x 6,0xB,0x8,0xC}; //--------------------------------------------------------------------------- void crypt(unsigned int*n1,unsigned int*n2,unsigned long *k) { unsigned int N1=*n1,N2=*n2,n=0; int buf[8]; for(int i=0;i<32;i++) { if (i<24) N1=N1+k[i%8]; else N1=N1+k[7-i%8]; for (int j=0;j<=7;j++) { n=N1>>(4*j); n=n&0xF; buf[j]=tab[j][n]; } N1=0; for(int j=0;j<=7;j++) N1=N1^(buf[j]<<(4*j)); N1=(N1<<11)|(N1>>21); N1=N1^N2; N2=*n1; *n1=N1; } *n2=*n1;*n1=N2; } //--------------------------------------------------------------------------- void multi(unsigned char*x,unsigned char *l) { int c=0;char y=8; int k; for (int j=0;j<4;j++) { k=l[j]+x[j]*y+c; l[j]=k%256; c=k/256; } l[4]=c; }; void A(unsigned char *u); //--------------------------------------------------------------------------- void prisvUV(unsigned char *h,unsigned char *m) { for(int i=0;i<32;i++) { U[i]=h[i]; V[i]=m[i]; } } //--------------------------------------------------------------------------- void calc_key(unsigned char *u,unsigned char *v) { for(int i=0;i<32;i++) {W[i]=u[i]^v[i];} for(int i=0;i<=3;i++) { for(int k=1;k<=8;k++) { K[0][(i+1+4*(k-1))-1]=W[(8*i+k)-1];}} for(int ii=0;ii<3;ii++) { A(U); for(int j=0;j<32;j++) {U[j]=U[j]^C[ii][j];} A(V);A(V); for(int j=0;j<32;j++) {W[j]=U[j]^V[j];} for(int i=0;i<=3;i++) { for(int k=1;k<=8;k++) { K[ii+1][(i+1+4*(k-1))-1]=W[(8*i+k)-1];}} } } //--------------------------------------------------------------------------- void A(unsigned char *u){ transform temp,YY; for (int i=0;i<32;i++) {temp.ch[i]=u[i];} YY.X[3]=temp.X[0]^temp.X[1]; YY.X[2]=temp.X[3]; YY.X[1]=temp.X[2]; YY.X[0]=temp.X[1]; for (int i=0;i<32;i++) {u[i]=YY.ch[i];} } //--------------------------------------------------------------------------- void preobr_KSI(transform*f,int kol) { short temp1=0; for(int i=0;i<kol;i++) { temp1=f->_s[0]^f->_s[1]^f->_s[2]^f->_s[3]^f->_s[12]^f->_s[15]; for(int ii=0;ii<15;ii++) {f->_s[ii]=f->_s[ii+1];} f->_s[15]=temp1; } } //--------------------------------------------------------------------------- void prost_zam(unsigned char*h) { unsigned int N1=0,N2=0; transform for_zam; for(int i=0;i<32;i++) {for_zam.ch[i]=h[i];} for(int i=0;i<4;i++) { N1=for_zam._h[i*2]; N2=for_zam._h[i*2+1]; crypt(&N1,&N2,((unsigned long*)K)+i*8); Y._h[i*2]=N1;Y._h[i*2+1]=N2; } } //---------------------------------------------------------------------------- void Hshag(unsigned char*h,unsigned char*m) { preobr_KSI(&Y,12); for(int i=0;i<32;i++) {Y.ch[i]=Y.ch[i]^m[i];} preobr_KSI(&Y,1); for(int i=0;i<32;i++) {Y.ch[i]=Y.ch[i]^h[i];} preobr_KSI(&Y,61); for(int y=31;y>=0;y--) {h[y]=Y.ch[y];} } //---------------------------------------------------------------------------- void k_sum(unsigned char*s1,unsigned char* s2) { int k=0; for(int i=0;i<32;i++) { k=k+s1[i]+s2[i]; s1[i]=k%256; k=k/256; } } //---------------------------------------------------------------------------- int readM(unsigned char* m,FILE*f) { int i; for(i=0;i<32;i++) { m[i]=fgetc(f); if(feof(f)) break; } if(i!=32) for(int y=i;y<32;y++) {m[y]=0x00;} return i; } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { if (openf) { int last=0; FILE *f=fopen(OpenDialog1->FileName.c_str(),"rb"); fseek(f,0,SEEK_END);long int len=ftell(f);rewind(f); multi((unsigned char*)&len,L); int i=1; do{ last=readM(M,f); if(last==32&&i*32<len) {prisvUV(H,M); calc_key(U,V); prost_zam(H); Hshag(H,M); k_sum(E,M);} else { k_sum(E,M); prisvUV(H,M); calc_key(U,V); prost_zam(H); Hshag(H,M); prisvUV(H,L); calc_key(U,V); prost_zam(H); Hshag(H,L); prisvUV(H,E); calc_key(U,V); prost_zam(H); Hshag(H,E); break; } i++; } while(1); for(int i=31;i>=0;i--) {Edit1->Text=Edit1->Text+IntToHex(H[i],2);} fcloseall(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender) { if(OpenDialog1->Execute()) openf=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::N3Click(TObject *Sender) { Form1->Close(); } //--------------------------------------------------------------------------- разберешься сам? есть еще нормально написанный но я не помню куда его сунул....(((( |
в архиве лежит порядочно алгоритмов и тамже красиво реализованный ГОСТ, просто подключаешь класс и юзаешь... _http://vdv123.narod.ru/Temp.rar
|
Для выкладывания кодов используй тэг [code]
|
привожу пример криптографии MD5 На Delphi:
Код:
{ Вычисление хеш-суммы MD5 }З.Ы. сохраняешль код в файл UMD5.pas и пропиываешь его в uses. Для шифрования делай так:) LowerCase(MD5DigestToStr(MD5String('Здесь зашифрованная строка'))) |
при4ем тут мд5? 4ем просил бло4ный шифр
|
| Время: 21:26 |