Задача на шифровку в С++
А можно как-нибудь по научнее чтоли, просто это моё курсовое задание, его ещё вчера надо было сдать...если не трудно
-
- Сообщения: 106
- Зарегистрирован: 30 авг 2005, 02:53
- Откуда: Санкт-Петербург
- Контактная информация:
Нарыл вот в архивах... Писал года так 3 назад... Программка сразу шифрует и дешефрует, ключь забит руками, файло любое (хоть текст, хоть картинки или музыка... только не бери то что много весит, долго ждать будеш), но можеш переделать его на ввод с клавиатуры
считай, что по паролю тогда будет
P.S.: вопросы в аську, ибо нефиг на форуме флудить по простым задачам и рабочему коду 


Код: Выделить всё
//Реализация шифрации данных на основе регистра сдвига.
#include<iostream.h>
#include<math.h>
int reg[128]={0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,1,0,0,0,0,1};
int TempMass[128];//хранит сдвиг регистра во время выполнения функций
int tkey[128];
int NumBin[8];
int tempIn[128];
int tempOut[128];
char UnCodeFileName[100];
char CodeFileName[100];
int Bin2Dec(int N[8])
{
int i=0;
int NumDec=0;
for(i=7;i>-1;i--){
if(N[i]==1){
NumDec=NumDec+pow(2,7-i);
}
}
return NumDec;
}
void Dec2Bin(int NumDec)
{
int i=0;
for(int y=0;y<8;y++){
NumBin[y]=0;
}
i=7;
while(NumDec>0){
NumBin[i]=NumDec%2;
NumDec=NumDec/2;
i--;
}
}//end of Dec2Bin()
void Shiftfunc(int mass[128])//функция сдвига регистра
{
int tempmass[128];
int i;
int j;
j=0;
tempmass[j]=mass[127];
j=1;
for(i=0;i<128;i++){
tempmass[j]=mass[i];
j++;
}
for(i=0;i<128;i++){
TempMass[i]=tempmass[i];
}
}//end of Shiftfunc()
void XoRFunc(int String[128])
{
int temp[128];
int i=0;
while(i<128){
temp[i]=(String[i]+TempMass[i])%2;
i++;
}
for(i=0;i<128;i++){
tkey[i]=temp[i];
}
}//end of XoRFunc()
void CodeFunc(int mass[128])
{
FILE *out;
char tempch;
char filename[100];
int temp[8];
int i;
int q;
int j;
int k;
int sq;
int num;
filename[0]=0;
sprintf(filename,"code");
if((out=fopen(filename,"a+"))==NULL){
printf("Can not open file code!\n");
}
k=q=sq=0;
while(sq<128){
k=0;
for(i=0;i<8;i++){
temp[i]=mass[sq];
sq++;
}
num=Bin2Dec(temp);
num=num%256;
tempch=num;
fprintf(out,"%c",tempch);
}
fclose(out);
}//end of CodeFunc()
int UncodeFunc(int mass[128])
{
FILE* unc;
char tempch;
int temp[8];
int i;
int q;
int j;
int k;
int sq;
int num;
if((unc=fopen(UnCodeFileName,"ab+"))==NULL){
printf("Can not open file code!\n");
}
k=q=sq=0;
while(sq<128){
k=0;
for(i=0;i<8;i++){
temp[i]=mass[sq];
sq++;
}
num=Bin2Dec(temp);
num=num%256;
Dec2Bin(num);
for(j=q;j<q+8;j++){
tempOut[j]=NumBin[k];
k++;
}
q=j;
}
sq=0;
while(sq<128){
for(i=0;i<8;i++){
temp[i]=tempOut[sq];
sq++;
}
num=Bin2Dec(temp);
tempch=num;
fprintf(unc,"%c",tempch);
}
fclose(unc);
}//end of UncodeFunc()
int main()
{
FILE *in;
int TempReg[128];
int *temp;
char filename[100];
char TempString[129];
char infile[100];
int InString[128];
int OutString[128];
int insymbol;
int fsize=0;
int q;
int i;
int j;
int k;
int N;
for(i=0;i<128;i++){
TempMass[i]=reg[i];
}
cout << "Start." << endl;
cout << "Insert InFile:" << endl;
cin >> CodeFileName;
cout << "Insert OutFile:" << endl;
cin >> UnCodeFileName;
filename[0]=0;
if((in=fopen(CodeFileName,"rb+"))==NULL){
printf("Can not open file in.txt!\n");
}
i=j=q=k=0;
fseek(in,0,SEEK_END);
fsize=ftell(in);
fseek(in,0,SEEK_SET);
while(i<fsize){//кодирование файла
insymbol=fgetc(in);
Dec2Bin(insymbol);
k=0;
for(j=q;j<q+8;j++){
InString[j]=NumBin[k];
k++;
}
q=j;
if(q==128){
Shiftfunc(TempMass);
XoRFunc(InString);
CodeFunc(tkey);
for(j=0;j<128;j++){
InString[j]=0;
}
j=q=0;
}
i++;
}
Shiftfunc(TempMass);
XoRFunc(InString);
CodeFunc(tkey);
fclose(in);
filename[0]=0;
sprintf(filename,"code");
if((in=fopen(filename,"r+"))==NULL){
printf("Can not open file code!\n");
}
for(i=0;i<128;i++){
TempMass[i]=reg[i];
}
i=j=q=k=0;
fseek(in,0,SEEK_END);
fsize=ftell(in);
fseek(in,0,SEEK_SET);
while(i<fsize){//декодирование файла
insymbol=fgetc(in);
Dec2Bin(insymbol);
k=0;
for(j=q;j<q+8;j++)
{
OutString[j]=NumBin[k];
k++;
}//end of for()
q=j;
if(q==128){
Shiftfunc(TempMass);
XoRFunc(OutString);
UncodeFunc(tkey);
for(j=0;j<128;j++){
OutString[j]=0;
}
j=q=0;
}
i++;
}
fclose(in);
in=fopen("code","w");
fclose(in);
cout << "End." << endl;
return 0;
}

Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.