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

📄 vegener.cpp

📁 不需要知道密钥
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
int keylength(int m[350])
{
	int i,k,j=0,g,d;
    double w=0.0000, c[26],q[26],x=0,y;
	for(i=0;i<26;i++)
	{
		c[i]=0;
		q[i]=0;
	}
	for(i=1;w<0.06||w>0.07;i++)
	{
		for(g=0;g<26;g++)
		{
          q[g]=0;
		}
		for(k=1;k<=i;k++)
		{
			j=k-1;
			x=0;
			for(g=0;g<26;g++)
			{
		      c[g]=0;
		    }
			while(j<312)
			{ 
				d=m[j]-97;
				c[d]++;
				x++;
				j+=i;
			}
			for(g=0;g<26;g++)
			{
				y=(c[g]/x)*(c[g]/x);
				q[k-1]=q[k-1]+y;                
			}
		}
		for(k=1;k<=i;k++)
		{
			y+=q[k-1];
		}
        w=y/k;
	}	
    return i-1;
}
int * key(int l,char m[350])
{
	int *p,v[26],d,g,k=0,i,x=0,j;
    double a[26]={0.0000},c[26],y=0,A[26]={0.082,0.015,0.028,0.043,0.127,0.022,0.020,0.061,0.070,0.002,0.008,0.040,0.024,0.067,0.075,0.019,0.001,0.060,0.063,0.091,0.028,0.010,0.023,0.001,0.020,0.001};
	double w[26][26]={0};
	for(k=0;k<l;k++)
	{
		y=0;
		for(g=0;g<26;g++)
			{
		      c[g]=0;
			  v[g];
		    }
		for(i=1;m[k+(i-1)*l]!=NULL;i++)
		{			
			j=k+(i-1)*l;
			d=m[j]-97;
			c[d]++;
			y++;
		}
		for(i=0;i<26;i++)
		{
			w[k][i]=c[i]/y;
		}
	}
	y=0;
	for(d=0;d<l;d++)
	{
		for(k=0;k<26;k++)
		{
			a[k]=0;
			y=0;
			for(i=0;i<26;i++)
			{
				a[k]=a[k]+(w[d][i]*A[(26-k+i)%26]);
			}
		}  
			for(i=0;i<26;i++)
			{
				if(a[i]>y)
                {
				 y=a[i];
			     v[d]=i;
				}				
			}
	}
	printf("the key is:");
	for(d=0;d<l;d++)
	{
		printf("%c",char(v[d]+97));
		v[d]=int(v[d]);
	}	
	return p=v;            			
}
void decode(int o[350],int l)
{
	int q[6]={7,14,11,12,4,18};
	int i=0,j[350];
	char g[350];
   for (i=0;i<312;i++)
   {
	   j[i]=(26+o[i]-97-q[i%l])%26;
       g[i]=char(97+j[i]);
   }
   printf("\nthe message is:");
   for(i=0;i<312;i++)   
   {
	   printf("%c",g[i]);
   }
   printf("\n");
}
void main()
{
	FILE*fp;
	int *p,i=0,m,ich[350];
	char ch[350],filename[10];
	printf("Please input filename:");
	scanf("%s",filename);
	if((fp=fopen(filename,"r+"))==NULL)
	{
	printf("cannot open file\n");
	exit(0);
	}
	fgets(ch,350,fp);
	for(i=0;i<313;i++)
	{
		ich[i]=0;
		printf("%c",ch[i]);
        ich[i]=int(ch[i]);
	}
	m=keylength(ich);
	printf("\nthe keylength is %d\n",m);	
	p=key(m,ch);
    decode(ich,m);	
	fclose(fp);
}









⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -