📄 des3rla.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 + -