Jump to content
BulForum.com

Tursq malka programka za kodirane


NISA

Recommended Posts

Trqbava mi malka programka za kodirane i dekodirane po vuzmojnost pisana na C nqma zna4enie po koi algoritum e pravena.Trqbava mi za edna kursova rabota ama nqmam vreme sama da sqdam da q mislq taka 4e ako nqkoi ima ne6to gotovo 6te sum mu blagodarna 10x :rolleyes:

Link to comment
Share on other sites

Гледам цял ден стои без отговор поста ти, та нека да го вдигнем нагоре в списъка. ;)

 

Ето ти програмен код, който реализира RSA кодиране. Приема на входа ключ + текст за кодиране и извежда кодиран текст. За съжаление не е на С - не ми е силната страна. Не съм сигурен и дали декодира, но май да. Но пък за сметка на това е наистина малка програмка - 4 реда. Ще се изненадам на С да стане толкова малка.

 

#!/usr/local/bin/perl -s-- #export-a-crypto-system sig, RSA in 4 lines PERL:
$e-$d&(($k,$n)=@ARGV)==2||die"$0 -d|-e key mod out\n";$v=$w=1+length$n&
~1;$v-=$d*2;$w-=$e*2;$_=unpack('B*',pack('H*',1$k?"0$k":$k));s/^0+//;
s/1/0lM*ln%/g;s/0/d*ln%/g;while(read(STDIN,$m,$w/2)){$m=unpack("H$w",$m);$a=
`echo 16oOi\U$m SM$n\Esn1$_ p|dc`;print pack("H$v",'0'x($v+1-length$a).$a);}

 

Ето го и източника - http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html

 

Айде сега някой С програмист да си каже тежката дума по същество.

Link to comment
Share on other sites

Ето една малка програмка, която писах преди доста време. Кодирането е изключително просто - вариация на метода на Цезар. Надявам се не е прекалено простичко и да ти свърши работа.

 

main.c

/*
 This program is under the GNU General Public License. 
 I took the encryption algorythm from an old book for the Second World War.
 dinux
 Enjoy!

*/

#include <stdlib.h>

#ifdef __dos__
#include <conio.h>	/*Very strange. Only DOS has it and needs it*/
#endif

#include "crypt.h"

void usage(const char* progname);

int main(int argc, char **argv) {
char* passwd = (char *)malloc(256);
printf(" Programmed by dinux.\tdinux@mail.bg\n\n");
if(argc!=4) {
 usage(argv[0]);
 return -1;
}

passwd = getpass("Please, enter the password: ");

switch ( *(argv[1]+1) ) {
 case 'e':
	 encrypt_d(passwd, argv[2], argv[3]);
	 break;
 case 'd':
	 decrypt_d(passwd, argv[2], argv[3]);
	 break;
 default:
	 usage(argv[0]);
	 return -1;
}
return 0;
}


void usage(const char* progname) {
printf("\nUsage: %s [-ed] input.txt output.txt\n", progname);
printf("-e       Encrypts input.txt\n");
printf("-d       Decrypts input.txt\n");
}

 

crypt.c

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

#define MAXCOORD 256

void encrypt_d(const char *passwd, const char* infile, const char* outfile)
{
int p = 0;
FILE* input = fopen(infile, "r");
FILE* output = fopen(outfile, "w");
short int letter = 0;
const int lenght = strlen(passwd);

letter = fgetc(input);
while ( !feof(input) ) {
 letter = (int) (letter+(int)(*(passwd+p)) % MAXCOORD);
 fputc(letter, output);
 p++;
 if (p > lenght)
	 p = 0;
 letter = fgetc(input);
}
fclose(output);
fclose(input);
}


void decrypt_d(const char *passwd,const char* infile, const char* outfile)
{
FILE* input = fopen(infile, "r");
FILE* output = fopen(outfile, "w");

int p = 0;
short int Z;
int letter = 0;

const int lenght = strlen(passwd);
letter = fgetc(input);
while ( !feof(input) ) {
 if( ((int)(*(passwd+p))+letter) > MAXCOORD )
	 Z=1;
 else
	 Z=0;
 letter = (int)(MAXCOORD*Z + letter - (int)(*(passwd+p)));
 fputc( letter, output);
 p++;
 if (p > lenght)
	 p = 0;
 letter = fgetc(input);
}
fclose(output);
fclose(input);
}

 

crypt.h

extern void encrypt_d(const char* passwd,const char* infile,const char* outfile);

extern void decrypt_d(const char* passwd,const char* infile,const char* outfile);

Link to comment
Share on other sites

#!/usr/local/bin/perl -s-- #export-a-crypto-system sig, RSA in 4 lines PERL:<!--QuoteEBegin-->$e-$d&(($k,$n)=@ARGV)==2||die"$0 -d|-e key mod out\n";$v=$w=1+length$n&<!--QuoteEBegin-->~1;$v-=$d*2;$w-=$e*2;$_=unpack('B*',pack('H*',1$k?"0$k":$k));s/^0+//;<!--QuoteEBegin-->s/1/0lM*ln%/g;s/0/d*ln%/g;while(read(STDIN,$m,$w/2)){$m=unpack("H$w",$m);$a=<!--QuoteEBegin-->`echo 16oOi\U$m SM$n\Esn1$_ p|dc`;print pack("H$v",'0'x($v+1-length$a).$a);}

Само едно нещо се чудя, абе това как изобщо го разбираш :):):)

Link to comment
Share on other sites

Трудно.... :D Но се свиква. Какво му е неясното? Щом програмираш, значи повечето конструкции ти говорят нещо, нищо че е на Perl. Като за начало - не го гледай като цяло. Разглеждай го конструкция по конструкция. Ще видиш, че ще го разбереш горе-долу и че не е чак толкова неясно...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...