МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Лабораторна робота № 3
з дисципліни “Криптографічні системи та протоколи”
на тему:
“ Ранцевої криптосистеми Меркля-Хеллмана ”
Мета роботи: вивчитити алгоритм ранцевої криптосистеми Меркля-Хеллмана
1. Завдання.
Реалізувати програму, що дозволяє шифрувати інформацію з використанням ранцевої криптосистеми Меркля-Хеллмана
2. Фрагменти тексту програми.
кодування даних
…
void encoding(FILE *inputFile,FILE *outputFile, FILE *filePublicKey)
{ int count=-1; string mask=""; int ch; char bitBuffer[8]; fread(&useN,sizeof(int),1,filePublicKey); fread(&publicKey,sizeof(unsigned long int),useN,filePublicKey); fclose(filePublicKey); fseek(inputFile,0,0);
do { ch = fgetc(inputFile); if (ch!=-1) { int chD=ch; itoa(ch,bitBuffer,2);
for(int j=8-1;j>0;j--) { if(chD<(pow(2,j)-1)) mask+="0";
else { for(int k=0;k<=j;k++) mask+=bitBuffer[k]; break; } } }
if(mask.length()==useN) { unsigned long int temp=0; for(int i=0;i<mask.length();i++)
if(mask[i]=='1') temp+=publicKey[i]; fwrite(&temp,sizeof(unsigned long int),1,outputFile); mask=""; }
} while(ch!=EOF);
if(mask!="") { for(int i=0;i<useN-mask.length();i++) mask+="0"; unsigned long int temp=0;
for(int i=0;i<mask.length();i++) if(mask[i]=='1') temp+=publicKey[i]; fwrite(&temp,sizeof(unsigned long int),1,outputFile); }
fwrite(&count,sizeof(int),1,outputFile); fclose(inputFile); fclose(outputFile);}
…
декодування даних
…
void decoding(FILE *inputFile,FILE *outputFile, FILE *filePrivateKey)
{ unsigned long int temp=0; unsigned long int x; string mask="";
fread(&useN,sizeof(int),1,filePrivateKey);
fread(&x,sizeof(unsigned long int),1,filePrivateKey);
fread(&qr.q,sizeof(unsigned long int),1,filePrivateKey);
fread(&privateKey,sizeof(unsigned long int),useN,filePrivateKey);
fclose(filePrivateKey);
fseek(inputFile,0,0); fread(&temp,sizeof(unsigned long int),1,inputFile);
while(temp!=-1)
{ temp=(temp*x)%qr.q; if(temp==0) temp=qr.q; for(int i=useN-1;i>=0;i--)
if(temp>=privateKey[i]) { temp-=privateKey[i]; mask="1"+mask; }
else mask="0"+mask; char ch=0; int k=0, p=8;
do { for(int i=k;i<(k+8);i++) { p--; if(mask[i]=='1') ch+=pow(2,p); } k+=8; p=8;
fwrite(&ch,sizeof(char),1,outputFile); } while(k<useN);
mask=""; fread(&temp,sizeof(unsigned long int),1,inputFile); }
fclose(outputFile); fclose(inputFile);}
…
5. Результати роботи
Рисунок 1 – Шифрування даних з використанням ранцевої криптосистеми Меркля-Хеллмана.
Висновок: На даній лабораторній роботі було засвоєно та реалізовано ранцеву криптосистему Меркля-Хеллмана