cpp 代码
-
-
-
- #include<stdio.h>
- #include<math.h>
-
- int find_key_lenth(char*pass,int len)
- {
-
- int d=0,count,MaxCount=0;
- for(int step=1;step<10;step++)
- {
- count=0;
- for(int j=0;j<len&&(j+step)<len;j++)
- {
- if(pass[j]==pass[j+step])
- count++;
- }
- if(count>MaxCount)
- {
- MaxCount=count;
- d=step;
- }
- }
- return d;
- }
-
- void decode(char*pass,char*ming,int d,int len)
- {
- float v[26]={0};
- int per_len=len/d;
- double A[26]={0.082,0.015,0.028,0.043,0.127,
- 0.022,0.02,0.061,0.07,0.002,0.008,
- 0.04,0.024,0.067,0.075,0.019,0.001,
- 0.06,0.063,0.091,0.028,0.01,0.023,0.001,0.02,0.001};
-
- double B[26]={0};
- char*key;
- key=new char[d];
- for(int i=0;i<d;i++)
- {
- int j=0;
- while(true)
- {
- if((i+d*j)>=len) break;
- v[pass[i+d*j]-'a']+=1;
- j++;
- }
- for(int k=0;k<26;k++)
- v[k]=v[k]/per_len;
-
- for(k=0;k<26;k++)
- {
- for(int l=0;l<26;l++)
- B[k]+=A[l]*v[(l+k)%26];
- }
-
- double max=1;
- int c;
- for(k=0;k<26;k++)
- {
- if(fabs(B[k]-0.065)<max)
- {
- max=fabs(B[k]-0.065);c=k;
- }
- }
- key[i]=c;
-
- for(k=0;k<26;k++)
- {
- B[k]=0;
- v[k]=0;
- }
- printf("%c",'a'+key[i]);
- }
-
- printf("\n\n明文:\n");
- for(i=0;i<len;i++)
- {
- int tmp;
- tmp=pass[i]-'a';
- ming[i]=(tmp-key[i%d]+26)%26+'a';
- printf("%c",ming[i]);
- }
- printf("\n\n");
- return ;
- }
- int main()
- {
- char password[1000]={0};
- char mingwen[1000]={0};
- FILE* fp;
- if((fp=fopen("xkju.txt","r+"))==NULL)
- {
- printf("xkju.txt open error!\n");
- return 1;
- }
- int i=0,d;
- printf("密文:");
- while((password[i++]=fgetc(fp))!=EOF);
- for(int j=0;j<i;j++)
- {
- if(j%59==0) printf("\n");
- printf("%c",password[j]);
- }
- d=find_key_lenth(password,i-1);
- printf("\n\nd==%d\n",d);
- printf("key=");
- decode(password,mingwen,d,i-1);
- fclose(fp);
- return 0;
- }
发现指针有指针的好处,有好多问题都是JAVA不太方便处理的
分享到:
相关推荐
vigenere密码破解.doc
你想要的,这里都有
自己写的凯撒密码和Vigenere算法,很简单
Vigenere算法实现代码算法实现代码
vigenere c++ 实现在 Microsoft visual C++环境下创建源文件 程序执行时按提示输入关键字、明文,验证输出密文,
vigenere implementation in C++
用C语言实现的vigenere加密算法,易懂!
Vigenere密码的密文字母是用明文字母在Vigenere方阵中的列和密钥字母在Vigenere方阵中的行的交点处的字母来代替的。该C程序实现了了这一简单但值得研究的古典密码。
应用密码学作业--破解维吉尼亚(vigenere)密码.pdf
1. Z26 上的仿射密码体制: (1) 应用 随机产生的密钥 (A 、 B ) 将一段英 文 ( 其长度应较长 ) 进行加、解密; (2) 针对 (1) ,统计其明文和密文中各字符出现的频率; (3) 针对 (1) ,计算明文和密文的重合指数...
维吉尼亚 Vigenere 密码算法 Javascript实现加密与解密
自制vigenere密码,如果有任何问题可以一起讨论。。。。
用C++实现Vigenere加密
vigenere 密码的加密解密算法 C语言代码
This is vigenere........
vigenere密码,维吉尼亚密码,本人试用可以用。
Vigenere密码是实现 本程序使用java编写
vigenere密码的无密钥破解方法matlab代码
为了消除时空变化表达过程中语义的不一致性,将时空变化前后的实体集、变化类型、规则作为变化表达的3个基本元素,利用数据 知识包的形式建立了基于3个基本元素的时空变化表达的三元模型CAR,即变化类型C、变化属性...