91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .zip
    金幣: 2
    下載: 1 次
    發(fā)布日期: 2021-07-19
  • 語言: C/C++
  • 標(biāo)簽: Vigenère??

資源簡介

在只知道密文的情況下,對密文分析。猜測密鑰長度,然后進(jìn)行驗證,確定密鑰長度后,破譯出密鑰,最后反解出原文。c語言代碼,密文放在txt文件當(dāng)中,破譯的明文,也保存在txt文件當(dāng)中,擴(kuò)展性強

資源截圖

代碼片段和文件信息

#include
#include
#include
#include
#define?top?100//設(shè)置輸入上限?
int?judge(char?str[]);
void?guess_keyt(char?*secret);
void?analysis(char?*secretint?lengthint?m_len);
void?translate(char?*secretint?lenint?lengthint?m_lenchar?*alphabet);
void?write_file(char?yuan_wen[]);
int?main()
{
FILE?*fp;
char?secret[1000];//保存初始密文
if((fp?=?fopen(“密文.txt““r“))?==?NULL)//從文件當(dāng)中讀取初始,并保存在數(shù)組中
{
printf(“文件打開失敗!“);
return?-1;
}
fscanf(fp“%s“&secret);
fclose(fp);
guess_keyt(secret);
return?0;
}
//用來猜測密鑰長度
void?guess_keyt(char?*secret)
{
int?ijktotal?=?0;
double?max;
int?m_len;//初步確認(rèn)的密鑰長度
int?length;//初始密文長度
int?num;//保存輸入的密鑰長度
char?s_top[10];//輸入的猜測的密鑰長度,字符串格式,然后判斷輸入是否合法
char?*secret1?=?secret;
length?=?strlen(secret1);
printf(“請輸入你認(rèn)為的密鑰最大長度(不超過%d):\n“top);
scanf(“%s“s_top);
num?=?judge(s_top);


int?coincidence[top];//移動num位后,每次移動的重合次數(shù)
double?average;//總共移動num次后,重合次數(shù)的平均數(shù)
double?fangc[num];//總共移動num次后,每次移動的方差
//用凱撒猜測發(fā),初步確認(rèn)密鑰長度?
//計算從移動1次,到移動你認(rèn)為的最大次數(shù)的,重合次數(shù)?
for(i?=?1;i?<=?num;i++)
{
coincidence[i-1]?=?0;
for(j?=?0k?=?i;j? {
if(k?==?length)
{
k?=?0;
}
if(secret[k]?==?secret1[j])
{
coincidence[i-1]++;
}
}
}
printf(“移動%d的重合次數(shù)分別為:\n“num);
?
for(i?=?0;i? {
total?=?total?+?coincidence[i];
printf(“%d?“coincidence[i]);
}

//計算每一次的樣本方差,用來找出最佳值?
average?=?total*1.0/num;
printf(“%d“total);
printf(“\n\n這%d次的平均數(shù)為:\n%.2f\n\n“numaverage);
printf(“樣本方差分別為:\n“);

for(i?=?0;i? {
fangc[i]?=?(coincidence[i]?-?average)*(coincidence[i]?-?average);
printf(“%.2f??“fangc[i]);
}

//方差最大值時對應(yīng)的次數(shù),最有可能就是密鑰的長度,計算可能的密鑰長度?
for(i?=?0;i? {
if(max? {
max?=?fangc[i];
m_len?=?i?+?1;
}
}
printf(“\n\n我們可以明顯的看出來,第%d個樣本方差為%.2f遠(yuǎn)遠(yuǎn)大于其他數(shù)據(jù)\n即密鑰長度可能為:%d\n\n接下來通過重合指數(shù)進(jìn)行驗證\n\n\n“m_lenmaxm_len);
analysis(secretlengthm_len);
// printf(“%d“num);
}
void?analysis(char?*secretint?lengthint?m_len)
{
int?i?=?0j?=?0k?=?0num?=?0;
int?len;//分組后每組的長度
float?average?=?0ave1?=?0ave2?=?0;
char?group[m_len][len];//分組后的密文?
char?alphabet[]?=?{“ABCDEFGHIJKLMNOPQRSTUVWXYZ“};
int?frequency[m_len][26];//分組后每組每個字母的頻數(shù)?
double?ratio[m_len];//每組中任取兩個字母相同的概率?
len?=?length?/?m_len;//按密鑰長度對密文進(jìn)行分組,計算每組的長度
if(length?%?m_len?!=?0)
{
len++;
}
for(i?=?0;i? {
for(j?=?0;j? {
group[j][i]?=?secret[k];
k++;
}
}

for(i?=?0;i? {
for(j?=?0;j? {
frequency[i][j]?=?0;
for(k?=?0;k? {
if(group[i][k]?==?alphabet[j])
{
frequency[i][j]++;
}
}
}
}
for(i?=?0;i? {
ratio[i]?=?0;
num?=?0;
for(j?=?0;j? {
if(frequency[i][j]?>=?2)//出現(xiàn)次數(shù)小于2的字母,不存在取到兩個相同的情況
{
num?+=?frequency[i][j]*(frequency[i][j

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????312??2017-02-25?15:49??密文.txt
?????文件????????7690??2017-03-10?22:21??維吉尼亞密碼解析.cpp

評論

共有 條評論