Skip to content

One-time pad (конзолна апликација у програмском језику C)

Задатак

Креирајте конзолну апликацију у програмском језику C или C# за One-time pad шифровање. Улаз треба да буде отворени текст P (стринг) и кључ K (стринг), а излаз шифрат C (битови).

Домаћи задатак

Креирајте конзолну апликацију у програмском језику C или C# за One-time pad дешифровање. Улаз треба да буде шифрат С (битови из ове апликације) и кључ K (стринг), а излаз дешифровани отворени текст P (стринг).

Решење

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

const char *bajt_u_bitove(int x)
{
	static char b[9];
	b[0] = '\0';
	char *p = b;
	int z;
	for (z = 128; z > 0; z >>= 1)
		*p++ = (x & z) ? '1' : '0';
	return b;
}

int main(void)
{
	printf("+-----------------------------------+\n");
	printf("|   ZASTITA INFORMACIONIH SISTEMA   |\n");
	printf("|      One-time pad sifrovanje      |\n");
	printf("+-----------------------------------+\n");
	int i;
	char P[100], K[100], C[100];
	printf("\nUnesite otvoreni tekst: ");
	gets(P);
	printf("P: ");
	for (i = 0; i < strlen(P); i++)
		printf("%s", bajt_u_bitove(P[i]));
	printf("\n\nUnesite kljuc: ");
	gets(K);
	printf("K: ");
	for (i = 0; i < strlen(K); i++)
		printf("%s", bajt_u_bitove(K[i]));
	if (strlen(P) != strlen(K))
		printf("\n\nGRESKA: Duzina otvorenog teksta i kljuca nije ista!");
	else
	{
		printf("\n\nC = P XOR K");
		printf("\nC: ");
		for (i = 0; i < strlen(K); i++)
		{
			C[i] = P[i] ^ K[i];
			printf("%s", bajt_u_bitove(C[i]));
		}
	}
	return 0;
}

Тест примери

Шифровање:

+-----------------------------------+
|   ZASTITA INFORMACIONIH SISTEMA   |
|      One-time pad sifrovanje      |
+-----------------------------------+

Unesite otvoreni tekst: velimir
P: 01110110011001010110110001101001011011010110100101110010

Unesite kljuc: program
K: 01110000011100100110111101100111011100100110000101101101

C = P XOR K
C: 00000110000101110000001100001110000111110000100000011111

Ако се не слаже дужина отвореног текста и кључа:

+-----------------------------------+
|   ZASTITA INFORMACIONIH SISTEMA   |
|      One-time pad sifrovanje      |
+-----------------------------------+

Unesite otvoreni tekst: velimir
P: 01110110011001010110110001101001011011010110100101110010

Unesite kljuc: radlovacki
K: 01110010011000010110010001101100011011110111011001100001011000110110101101101001

GRESKA: Duzina otvorenog teksta i kljuca nije ista!