⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enigma.cpp

📁 加密算法的使用示例
💻 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 + -