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

📄 des3rla.cpp

📁 des preko c neznam hocel pomoci
💻 CPP
字号:
/* des3rla.cpp *//* Implementacija linearne kriptoanalize DES-a od 3 runde *//* 2005. godina *//* Autor: Darko Poljak *//* Linearna aproksimacija: *//* Pl[15] ^ Ph[7,18,24,29] ^ Cl[15] ^ Ch[7,18,24,29] = K1[22] ^ K3[22] *//* vjerojatnost da vrijedi: p=0.70 *//* za uspjeh od 99.8% potrebno je 50 poznatih otvorenih tekstova */#include <cstdlib>#include <cstdio>#include <ctime>#include "cryptosystem.h"#include "DES3r.h" /* 3-round DES */#include "des3rla.h"using namespace std;void gen_texts3r(string *p, string *c,const string& key){	int i;	DES3r des;	(*p)="";	for(i=0;i<8;++i) {		(*p)+=rand()&0xff;	}	*c=des.encrypt(*p,key);}extern bit LHS; /* lijeva strana linearne aproksimacije 3-round DES-a */bit lin_analysis_DES_1bit(void (*next_plain_cipher) (string*, string*,const string&),					int ptxtcnt,const string& key, float p){	string P, C; // otvoreni P i kriptirani C tekst	int i, T=0;  // T - brojac: za koliko parova otvorenog i 		     //             kriptiranog teksta je linearni		     //             izraz jednak 0	bit t;	bit kxor;    // = K1[22] ^ K3[22], 		     // = lijeva strana linearnog izraza	/* za svaki otvoreni tekst i pripadni kriptirani tekst */	for(i=0;i<ptxtcnt;++i) {		next_plain_cipher(&P,&C,key);	/*		3-round DES linearni izraz:		Pl[15] ^ Ph[7,18,24,29] ^ Cl[15] ^ Ch[7,18,24,29] = K1[22] ^ K3[22]	*/	/*		LSb je najvise desno,		MSb je najvise lijevo,		potrebno je prevesti u indeks polja.	*/		/*		 *(pout[63-15]^pout[31-7]^pout[31-18]^pout[31-24]^pout[31-29]^		    cout[63-15]^cout[31-7]^cout[31-18]^cout[31-24]^cout[31-29])		 */		/* t je lijeva strana linearne aproksimacije */		t=LHS;		if(t==0) {			/* povecaj brojac */			++T;		}	}	/* ovisno o vjerojatnosti */	/* ovisno o broju tekstova za koje je lijeva strana jednaka nuli */	/* pretpostavi se desna strana linearnog izraza (kxor) */	if(p>0.5) {		if(T> (ptxtcnt>>1)) {			kxor=0;		} else {			kxor=1;		}	} else {		if(T> (ptxtcnt>>1)) {			kxor=1;		} else {			kxor=0;		}	}	return kxor;}void analysis_init(string *key){	int i;	srand((unsigned)time(NULL));	*key="";	for(i=0;i<8;++i) {		(*key)+=rand() & 0xff;	}}

⌨️ 快捷键说明

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