?? enigma.cpp
字號:
// Enigma.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
char * Encrypt(char *Dest,char *mstext, char *CodeWord)
{
unsigned int i,j,k,ls2e,lam,lcw,mp;
char Matrix[100]="\0";
char mov1[100],mov2[100];
char tempcwl,c2e,cwl;
char EncryptedLetter[100] ;
char strCryptMatrix[97][100];
char *Str2Encrypt;
char EncryptedString[100];
// 初始化數組
strcpy(Matrix ,"8x3p5BeabcdfghijklmnoqrstuvwyzACDEFGHIJKLMNOPQRSTUVWXYZ1246790-.#/\\!@$<>&*()[]{}';:?=+~`^|%_");
// strcat(Matrix , "\n"); strcat(Matrix , "\r"); strcat(Matrix , "\"");
j = 0;
lam = strlen(Matrix);
strcpy(strCryptMatrix[0] ,Matrix);
for( i = 1;i< lam;i++ )
{
strncpy(mov1,strCryptMatrix[j], 1);
mov1[1]='\0';
strncpy(mov2,strCryptMatrix[j]+1, (lam - 1));
mov2[lam-1]='\0';
strcpy(strCryptMatrix[i],mov2);
strcat(strCryptMatrix[i],mov1);
j = j + 1;
}
//加密--解密
Str2Encrypt = mstext;
ls2e = strlen(mstext);
lcw =strlen(CodeWord);
strcpy(EncryptedLetter,"");
strcpy(EncryptedString,"");
j = 0;
for( i=1; i<=ls2e; i++)
{
strncpy(&c2e,Str2Encrypt+j, 1);
for (k=0; k < strlen(Matrix); k++)
{
strncpy(&tempcwl,Matrix+k,1);
if(tempcwl == c2e)
{ mp = k; break; }
}
strncpy(&cwl,CodeWord+j, 1);
for (k= 0; k<lam; k++)
{ strncpy(&tempcwl,strCryptMatrix[k]+mp, 1) ;
if ( tempcwl == cwl)
{
strncpy(EncryptedLetter,strCryptMatrix[k], 1);
EncryptedLetter[1]='\0';
strcat(EncryptedString ,EncryptedLetter);
break;
}
}
j = j + 1;
if (j > lcw ) j = 1;
}
strcpy(Dest,EncryptedString);
return Dest;
}
void FormatString(char *dest,char *src,unsigned int len)
{
int nzero;
char temp[100]="\0";
strcpy(temp,"\0");
if (strlen(src) < len)
{
nzero = len - strlen(src);
for (int i=0;i<nzero;i++)
strcat(temp,"0");
strncat(temp,src,len - nzero);
strcpy(dest,temp);
}
}
void Create_File(char *filename)
{
FILE *fp;
char keychar[100]="\0";
char buffer[100]="\0";
char field1[9],field2[10],field3[10],field4[3];
unsigned long f1=0ul;
unsigned long f2=0ul;
unsigned long f3=0ul;
unsigned long f4;
fp = fopen(filename,"w");
strcpy(field4,"15");
for (long i=0;i<100000L; i++)
{
f1 +=1; ltoa(f1,field1,10); FormatString(field1,field1,8);
f2=(rand()*10000+rand()) % 1000000000ul; ltoa(f2,field2,10); FormatString(field2,field2,9);
f3=(rand()*10000+rand()) % 1000000000ul; ltoa(f3,field3,10); FormatString(field3,field3,9);
f4=rand() % 100; ltoa(f4,field4,10); FormatString(field4,field4,2);
fprintf(fp,"%8s,%9s,%9s,%2s\r\n",field1,field2,field3,field4);
}
fclose(fp);
}
int main(int argc, char* argv[])
{
char buffer[80]="123456\0";
char buffer1[80]="\0",buffer2[80]="\0";
char KeyChar[80]="\0";
char field1[9],field2[10],field3[10],field4[3];
FILE *fpin,*fpout;
if (argc <3)
{
printf("Usage: enigma inputfile outfile \n");
return 0;
}
else
{
// Create_File(argv[1]);
if ( (fpin = fopen(argv[1],"r") )==NULL)
{ printf("input file open error!\n");
return 0;
}
if ((fpout = fopen(argv[2],"w")) ==NULL)
{
printf("output file open error!\n");
return 0;
}
}
fscanf(fpin,"%8s,%9s,%9s,%2s",field1,field2,field3,field4);
while( !feof(fpin))
{
field1[8]='\0';field2[9]='\0';field3[9]='\0';field4[2]='\0';
strcpy(KeyChar,field1);
strncat(KeyChar,field4,3);
Encrypt(buffer1,field2,KeyChar);
Encrypt(buffer2,field3,KeyChar);
fprintf(fpout,"%8s,%9s,%9s,%2s\r\n",field1,buffer1,buffer2,field4);
fscanf(fpin,"%8s,%9s,%9s,%2s",field1,field2,field3,field4);
}
fclose(fpin);
fclose(fpout);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -