Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №11 / vernam1 / vernam1
.cpp// vernam1.cpp : Defines the entry point for the console application.
// Lab. rab#1 Vernam encryption
// Students: Agamov Z.G., Belkin I.A., Soultakov M.A.
// Group: 4305
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <cctype>
#define ENTO "Key entropy error" /* entropy too short */
int al_dec = 0;
void fault(char *TYPE, char *problem)
{
void *empty=0;
printf("%s: %s\n", TYPE, problem);
exit(1);
}
char* vernam (char *org, char *key_f) {
unsigned int itra = 0, sem = 1, pad = 0;
char *hlpr, *dst;
dst = (char *) calloc (strlen (org), sizeof (char));
hlpr = (char *) calloc (strlen (org), sizeof (char));
for (itra = 0, pad = 0; itra < strlen (key_f); itra++)
if (isalpha (key_f[itra]))
hlpr[pad++] = key_f[itra];
if (strlen (org) > strlen (hlpr))
fault(ENTO, "key too small or invalid symbols.");
for (itra = 0, pad = 0; itra < strlen (key_f); itra++)
{
if (isupper (org[itra]))
{
org[itra] = tolower (org[itra]);
sem--;
}
if (!isalpha (org[itra]))
dst[itra] = org[itra];
else if (!al_dec)
{
if (hlpr[itra]-'a'<0 && org[itra]-'a'<0)
pad = 'a' + (org[itra]-'a')*-1 + (hlpr[itra]-'a')*-1;
else if (hlpr[itra]-'a'<0)
pad = 'a' + (org[itra]-'a') + (hlpr[itra]-'a')*-1;
else if(org[itra]-'a'<0)
pad = 'a' + (org[itra]-'a')*-1 + (hlpr[itra]-'a');
else
pad = 'a' + (org[itra] - 'a') + (hlpr[itra] - 'a');
if (pad > 'z')
pad -= 26;
dst[itra] = pad;
}
else if (al_dec)
{
if (hlpr[itra]-'a'<0 && org[itra]-'a'<0)
pad = 'a' + (org[itra]-'a')*-1 - (hlpr[itra]-'a')*-1;
else if (hlpr[itra]-'a'<0)
pad = 'a' + (org[itra]-'a') - (hlpr[itra]-'a')*-1;
else if(org[itra]-'a'<0)
pad = 'a' + (org[itra]-'a')*-1 - (hlpr[itra]-'a');
else
pad = 'a' + (org[itra] - 'a') - (hlpr[itra] - 'a');
if (pad < 'a')
pad += 26;
dst[itra] = pad;
}
if (!sem)
{
dst[itra] = toupper (dst[itra]);
sem++;
}
}
return dst;
}
int main(int argc, char* argv[])
{
//printf("Lab #1. Vernam encryption\nGroup:4305\nStudents: Agamov Z., Belkin I., Soultakov M\n");
if (argc!=4) {
printf("Usage: vernam.exe <mode: 0-encrypt; 1-decrypt> <message> <key>\n");
exit(1);
}
al_dec = atoi(argv[1]);
printf(vernam(argv[2], argv[3]));
return 0;
}
Соседние файлы в папке vernam1