Vacanta
iulie 6, 2009 la 12:26 am (About me)
Yupii am scapat de facultate .. adik gata am terminat-o
si acum ma bucur de vacanta ..
Se intelege de ce nu am mai avut timp sa pun nimic nou .. dar ma voi ocupa de asta pe viitor
Ce voi face in continuare
inca nu stiu
Edit: Plec in tabara la mare la sfarstul lui august
Laborator 1
martie 12, 2009 la 9:57 am (Anul III, Facultatea de Informatica Iasi, Grafica pe calculator, Semestru` II)
Tags: C++, Glut, Grafica pe calculator, VS6
// Daca se doreste utilizarea bibliotecii GLUT trebuie
// inclus fisierul header GL/glut.h (acesta va include
// la GL/gl.h si GL/glu.h, fisierele header pentru
// utilizarea bibliotecii OpenGL). Functiile din biblioteca
// OpenGL sunt prefixate cu gl, cele din GLU cu glu si
// cele din GLUT cu glut.
//#include
#include “glut.h”
#include
#include
#include
unsigned char prevKey;
void Display1() {
glColor3f(0.2,0.15,0.88); // albastru
glBegin(GL_LINES); // trasarea unei linii
glVertex2i(1,1); // coordonatele unui varf
glVertex2i(-1,-1);
glEnd();
glColor3f(1,0.1,0.1); // rosu
glBegin(GL_LINES);
glVertex2i(-1,1);
glVertex2i(1,-1);
glEnd();
glBegin(GL_LINES);
glVertex2d(-0.5,0);
glVertex2d(0.5,0);
glEnd();
}
void Display2() {
glColor3f(1,0.1,0.1); // rosu
glBegin(GL_LINES);
glVertex2f(1.0,1.0);
glVertex2f(0.9,0.9);
glVertex2f(0.8,0.8);
glVertex2f(0.7,0.7);
glVertex2f(0.6,0.6);
glVertex2f(0.5,0.5);
glVertex2f(-0.5,-0.5);
glVertex2f(-1.0,-1.0);
glEnd();
}
void Display3() {
// trasare puncte GL_POINTS : deseneaza n puncte
glColor3f(1,0.1,0.1); // rosu
glBegin(GL_POINTS);
glVertex2f(-0.5,0.5);
glVertex2f(-0.5,-0.5);
glVertex2f(0.5,-0.5);
glVertex2f(0.5,0.5);
glEnd();
glFlush();
}
void Display4() {
glColor3f(1,0.1,0.1); // rosu
// trasare linie poligonala GL_LINE_STRIP : (v0,v1), (v1,v2), (v_{n-2},v_{n-1})
glBegin(GL_LINE_STRIP);
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.8);
glVertex2f(0.5,0.6);
glVertex2f(0.5,0.4);
// de completat …
glEnd();
}
void Display5() {
glColor3f(1,0.1,0.1); // rosu
// trasare linie poligonala inchisa GL_LINE_LOOP : (v0,v1), (v1,v2), (v_{n-1},v0)
glBegin(GL_LINE_LOOP);
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.8);
glVertex2f(0.5,0.6);
glVertex2f(0.5,0.4);
glVertex2f(1.0,1.0);
// de completat …
glEnd();
}
void Display6() {
glColor3f(1,0.1,0.1); // rosu
// trasare triunghiuri GL_TRIANGLES : (v0,v1,v2), (v3,v4,v5), …
glBegin(GL_TRIANGLES);
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.8);
glVertex2f(0.8,0.8);
glVertex2f(-1.0,-1.0);
glVertex2f(-1.0,-0.8);
glVertex2f(-0.8,-0.8);
// de completat …
glEnd();
}
void Display7() {
// trasare patrulatere GL_QUADS : (v0,v1,v2,v3), (v4,v5,v6,v7), …
glBegin(GL_QUADS);
// de completat …
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.4);
glVertex2f(0.4,0.4);
glVertex2f(0.1,0.7);
glEnd();
}
void Display8() {
// trasare poligon convex GL_QUADS : (v0,v1,v2, …, v_{n-1})
glColor3f(0.2,0.15,0.88);
//glLineWidth(5);
glPolygonMode(GL_FRONT, GL_FILL);
glBegin(GL_POLYGON);
// de completat …
glVertex2f(0.4,0.4);
glVertex2f(-0.4,0.4);
glVertex2f(-0.65,0.0);
glVertex2f(-0.4,-0.4);
glVertex2f(0.4,-0.4);
glVertex2f(0.65,0.0);
glEnd();
glColor3f(1,1,1);
glPolygonMode(GL_FRONT, GL_FILL);
glBegin(GL_POLYGON);
// de completat …
glVertex2f(0.3,0.3);
glVertex2f(-0.3,0.3);
glVertex2f(-0.5,0.0);
glVertex2f(-0.3,-0.3);
glVertex2f(0.3,-0.3);
glVertex2f(0.5,0.0);
glEnd();
glColor3f(1,0.1,0.1);
glPolygonMode(GL_FRONT, GL_LINE);
glBegin(GL_POLYGON);
// de completat …
glVertex2f(0.3,0.3);
glVertex2f(-0.3,0.3);
glVertex2f(-0.5,0.0);
glVertex2f(-0.3,-0.3);
glVertex2f(0.3,-0.3);
glVertex2f(0.5,0.0);
glEnd();
}
void Init(void) {
// specifica culoarea unui buffer dupa ce acesta
// a fost sters utilizand functia glClear. Ultimul
// argument reprezinta transparenta (1 – opacitate
// completa, 0 – transparenta totala)
glClearColor(1.0,1.0,1.0,1.0);
// grosimea liniilor
glLineWidth(3);
// dimensiunea punctelor
glPointSize(4);
// functia void glPolygonMode (GLenum face, GLenum mode)
// controleaza modul de desenare al unui poligon
// mode : GL_POINT (numai vf. primitivei) GL_LINE (numai
// muchiile) GL_FILL (poligonul plin)
// face : tipul primitivei geometrice dpdv. al orientarii
// GL_FRONT – primitive orientate direct
// GL_BACK – primitive orientate invers
// GL_FRONT_AND_BACK – ambele tipuri
glPolygonMode(GL_FRONT, GL_LINE);
}
void Display(void) {
printf(”Call Displayn”);
// sterge buffer-ul indicat
glClear(GL_COLOR_BUFFER_BIT);
switch(prevKey) {
case ‘1′:
Display1();
break;
case ‘2′:
Display2();
break;
case ‘3′:
Display3();
break;
case ‘4′:
Display4();
break;
case ‘5′:
Display5();
break;
case ‘6′:
Display6();
break;
case ‘7′:
Display7();
break;
case ‘8′:
Display8();
break;
default:
break;
}
// forteaza redesenarea imaginii
glFlush();
}
/*
Parametrii w(latime) si h(inaltime) reprezinta noile
dimensiuni ale ferestrei
*/
void Reshape(int w, int h) {
printf(”Call Reshape : latime = %d, inaltime = %dn”, w, h);
// functia void glViewport (GLint x, GLint y,
// GLsizei width, GLsizei height)
// defineste poarta de afisare : acea suprafata dreptunghiulara
// din fereastra de afisare folosita pentru vizualizare.
// x, y sunt coordonatele pct. din stg. jos iar
// width si height sunt latimea si inaltimea in pixeli.
// In cazul de mai jos poarta de afisare si fereastra coincid
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
}
/*
Parametrul key indica codul tastei iar x, y pozitia
cursorului de mouse
*/
void KeyboardFunc(unsigned char key, int x, int y) {
printf(”Ati tastat . Mouse-ul este in pozitia %d, %d.n”,
key, x, y);
// tasta apasata va fi utilizata in Display ptr.
// afisarea unor imagini
prevKey = key;
if (key == 27) // escape
exit(0);
glutPostRedisplay();
}
/*
Codul butonului poate fi :
GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON
Parametrul state indica starea: “apasat” GLUT_DOWN sau
“eliberat” GLUT_UP
Parametrii x, y : coordonatele cursorului de mouse
*/
void MouseFunc(int button, int state, int x, int y) {
printf(”Call MouseFunc : ati %s butonul %s in pozitia %d %dn”,
(state == GLUT_DOWN) ? “apasat” : “eliberat”,
(button == GLUT_LEFT_BUTTON) ?
“stang” :
((button == GLUT_RIGHT_BUTTON) ? “drept”: “mijlociu”),
x, y);
}
int main(int argc, char** argv) {
// Initializarea bibliotecii GLUT. Argumentele argc
// si argv sunt argumentele din linia de comanda si nu
// trebuie modificate inainte de apelul functiei
// void glutInit(int *argcp, char **argv)
// Se recomanda ca apelul oricarei functii din biblioteca
// GLUT sa se faca dupa apelul acestei functii.
glutInit(&argc, argv);
// Argumentele functiei
// void glutInitWindowSize (int latime, int latime)
// reprezinta latimea, respectiv inaltimea ferestrei
// exprimate in pixeli. Valorile predefinite sunt 300, 300.
glutInitWindowSize(300, 300);
// Argumentele functiei
// void glutInitWindowPosition (int x, int y)
// reprezinta coordonatele varfului din stanga sus
// al ferestrei, exprimate in pixeli.
// Valorile predefinite sunt -1, -1.
glutInitWindowPosition(100, 100);
// Functia void glutInitDisplayMode (unsigned int mode)
// seteaza modul initial de afisare. Acesta se obtine
// printr-un SAU pe biti intre diverse masti de display
// (constante ale bibliotecii GLUT) :
// 1. GLUT_SINGLE : un singur buffer de imagine. Reprezinta
// optiunea implicita ptr. nr. de buffere de
// de imagine.
// 2. GLUT_DOUBLE : 2 buffere de imagine.
// 3. GLUT_RGB sau GLUT_RGBA : culorile vor fi afisate in
// modul RGB.
// 4. GLUT_INDEX : modul indexat de selectare al culorii.
// etc. (vezi specificatia bibliotecii GLUT)
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
// Functia int glutCreateWindow (char *name)
// creeaza o fereastra cu denumirea data de argumentul
// name si intoarce un identificator de fereastra.
glutCreateWindow (argv[0]);
Init();
// Functii callback : functii definite in program si
// inregistrate in sistem prin intermediul unor functii
// GLUT. Ele sunt apelate de catre sistemul de operare
// in functie de evenimentul aparut
// Functia
// void glutReshapeFunc (void (*Reshape)(int width, int height))
// inregistreaza functia callback Reshape care este apelata
// oridecate ori fereastra de afisare isi modifica forma.
glutReshapeFunc(Reshape);
// Functia
// void glutKeyboardFunc (void (*KeyboardFunc)(unsigned char,int,int))
// inregistreaza functia callback KeyboardFunc care este apelata
// la actionarea unei taste.
glutKeyboardFunc(KeyboardFunc);
// Functia
// void glutMouseFunc (void (*MouseFunc)(int,int,int,int))
// inregistreaza functia callback MouseFunc care este apelata
// la apasarea sau la eliberarea unui buton al mouse-ului.
glutMouseFunc(MouseFunc);
// Functia
// void glutDisplayFunc (void (*Display)(void))
// inregistreaza functia callback Display care este apelata
// oridecate ori este necesara desenarea ferestrei: la
// initializare, la modificarea dimensiunilor ferestrei
// sau la apelul functiei
// void glutPostRedisplay (void).
glutDisplayFunc(Display);
// Functia void glutMainLoop() lanseaza bucla de procesare
// a evenimentelor GLUT. Din bucla se poate iesi doar prin
// inchiderea ferestrei aplicatiei. Aceasta functie trebuie
// apelata cel mult o singura data in program. Functiile
// callback trebuie inregistrate inainte de apelul acestei
// functii.
// Cand coada de evenimente este vida atunci este executata
// functia callback IdleFunc inregistrata prin apelul functiei
// void glutIdleFunc (void (*IdleFunc) (void))
glutMainLoop();
return 0;
}
Laboratorul 2
martie 12, 2009 la 9:49 am (Anul III, Facultatea de Informatica Iasi, Programare bazata pe reguli, Semestru` II)
Tags: Arbore genealogic, CLIPS, Meniu, Programare bazata pe reguli, Sisteme expert
Arbore genealogic
(deffacts fapte
(parinti Maria_Alba Geanina_Alba Marian_Alba)
(parinti Claudia_Alba Marian_Alba Geanina_Alba)
(frati Alexandra_Popovici Ion_Popovici)
(soti Geanina_Alba Marian_Alba)
(soti Tina_Munteanu Vasile_Munteanu)
(frati Geanina_Alba Sonia_Turcescu)
(frati Geanina_Alba Marta_Leon)
(parinti Tina_Vlas Tina_Munteanu Vasile_Munteanu)
(parinti Monica_Munteanu Vasile_Munteanu Tina_Munteanu)
(frati Marian_Alba Zoe_Ungureanu)
(parinti Marian_Alba Tina_Munteanu Vasile_Munteanu)
(parinti Geanina_Alba Maia_Topala Gheoghe_Topala)
(parinti Tudor_Apostol Maia_Topala Gheoghe_Topala)
(parinti Roza_Apostol Mariana_Apostol Tudor_Apostol)
(frati Ion_Popovici Dana_Rogoz)
(parinti Alexandra_Popovici Camelia_Apostol Robert_Apostop)
(frati Camelia_Apostol Gigi_Burlacu)
(parinti Iuliana_Burlacu Nicoleta_Burlacu Gigi Burlacu)
(frati Sonia_Turcescu Tudor_Chirila)
(parinti Amanda_Low Silvia_Chirila Tudor_Chirila)
(parinti Gabriela_Leon Marta_Leon Titu_Leon)
(parinti Lidia_Turcescu Sonia_Turcescu Vasile_Turcescu)
)
(defrule meniu_principal
(not (optiune_principal ?))
=>
(printout t “1. Adauga” crlf)
(printout t “2. Cauta” crlf)
(printout t “3. Afisare” crlf)
(printout t “4. Iesire” crlf)
(printout t “Dati optiunea:” crlf)
(assert (optiune_principal (read)))
)
(defrule validare_principal
?a
(printout t “Nu ati introdus corect optiunea!” crlf)
(retract ?a)
(printout t “Introduceti din nou optiunea:” crlf)
(assert (optiune_principal (read)))
)
(defrule meniu_adauga
(optiune_principal 1)
(not (optiune_adauga ?))
=>
(printout t “1. Adauga parinti” crlf)
(printout t “2. Adauga frati/surori” crlf)
(printout t “3. Adauga sot/sotie” crlf)
(printout t “4. Iesire” crlf)
(printout t “Dati optiunea:” crlf)
(assert (optiune_adauga (read)))
)
(defrule validare_adauga
?a
(printout t “Nu ati introdus corect optiunea!” crlf)
(retract ?a)
(printout t “Introduceti din nou optiunea:” crlf)
(assert (optiune_adauga (read)))
)
(defrule adauga_parinti
?a
(printout t “Dati copilul si parintii: ” crlf)
(assert (parinti (read) (read) (read)))
(retract ?a)
)
(defrule adauga_frati
?a
(printout t “Dati frati:” crlf)
(assert (frati (read) (read)))
(retract ?a)
)
(defrule adauga_soti
?a
(printout t “Dati sot/sotie:” crlf)
(assert (soti (read) (read)))
(retract ?a)
)
(defrule adauga_iesire
?a<-(optiune_adauga 4)
?b
(retract ?a)
(retract ?b)
)
(defrule meniu_cauta
(optiune_principal 2)
(not (optiune_cauta ?))
=>
(printout t “1. Cauta frati” crlf)
(printout t “2. Cauta bunici” crlf)
(printout t “3. Cauta veri” crlf)
(printout t “4. Cauta cumnati” crlf)
(printout t “5. Cauta unchi/matusa” crlf)
(printout t “6. Cauta nepoti” crlf)
(printout t “7. Iesire” crlf)
(printout t “Dati optiunea:” crlf)
(assert (optiune_cauta (read)))
)
(defrule validare_cauta
?a
(printout t “Nu ati introdus corect optiunea!” crlf)
(retract ?a)
(printout t “Introduceti din nou optiunea:” crlf)
(assert (optiune_cauta (read)))
)
(defrule cauta_frati “facut la laborator”
(optiune_cauta 1)
(not (lista_frati $?))
=>
(printout t “Fratii pentru?” crlf)
(assert (lista_frati (read)))
)
(defrule completeaza_frati
(declare (salience 10))
?a
(retract ?a)
(assert (lista_frati $?x1 $?x2 ?x ?y))
)
(defrule completeaza_frati2
(declare (salience 12))
(or (and ?w<-(parinti ?x ?a ?b)
?q<-(parinti ?y ?a ?b)
)
(and ?w<-(parinti ?x ?a ?b)
?q
(assert (frati ?x ?y))
)
(defrule sterge_frati2
?a<-(frati ?x ?y)
?b
(retract ?a)
)
(defrule afiseaza_fratii
?a<-(optiune_cauta 1)
?b
(printout t “Frati: ” $?x crlf)
(retract ?a)
(retract ?b)
)
(defrule completeaza_parinti2
(declare (salience 12))
(or (frati ?x ?y)
(frati ?y ?x)
)
(parinti ?x ?a ?b)
(not (parinti ?y ? ?))
=>
(assert (parinti ?y ?a ?b))
)
(defrule cauta_bunici
(optiune_cauta 2)
(not (lista_bunici $?))
=>
(printout t “Bunicii pentru?” crlf)
(assert (nepot (read)))
(assert (lista_bunici))
)
(defrule completeaza_bunici
(declare (salience 10))
?a<-(nepot ?x)
?b
(retract ?b)
(assert (lista_bunici $?h ?z))
)
(defrule afisare_bunici
?a<-(optiune_cauta 2)
?b<-(lista_bunici $?h )
?c
(printout t “Bunicii: ” $?h crlf)
(retract ?a)
(retract ?b)
(retract ?c)
)
(defrule cauta_veri
(optiune_cauta 3)
(not (lista_veri $?))
=>
(printout t “Verii pentru?” crlf)
(assert (nume (read)))
(assert (lista_veri))
)
(defrule completeaza_veri1
(declare (salience 9))
?a<-(nume ?x)
?b
(retract ?b)
(assert (lista_veri $?h ?z))
)
(defrule completeaza_veri2
(declare (salience 8))
?a
(retract ?a)
(assert (lista_veri $?x1 $?x2 ?x ?z))
)
(defrule afisare_veri
?a<-(optiune_cauta 3)
?b<-(lista_veri $?h )
?c
(printout t “Veri: ” $?h crlf)
(retract ?a)
(retract ?b)
(retract ?c)
)
(defrule cauta_cumnati
(optiune_cauta 4)
(not (lista_cumnati $?))
=>
(printout t “Cumnati/cumnate pentru?” crlf)
(assert (nume (read)))
(assert (lista_cumnati))
)
(defrule completeaza_cumnati1
(declare (salience 9))
?a<-(nume ?x)
?b
(retract ?b)
(assert (lista_cumnati $?h ?z))
)
(defrule completeaza_cumnati2
(declare (salience 8))
?a
(retract ?a)
(assert (lista_cumnati $?x1 $?x2 ?x ?z))
)
(defrule afisare_cumnati
?a<-(optiune_cauta 4)
?b<-(lista_cumnati $?h )
?c
(printout t “Cumnati/Cumnate: ” $?h crlf)
(retract ?a)
(retract ?b)
(retract ?c)
)
(defrule cauta_unchi
(optiune_cauta 5)
(not (lista_unchi $?))
=>
(printout t “Unchi/matuse pentru?” crlf)
(assert (nume (read)))
(assert (lista_unchi))
)
(defrule completeaza_unchi1
(declare (salience 9))
?a<-(nume ?x)
?b
(retract ?b)
(assert (lista_unchi $?h ?z))
)
(defrule completeaza_unchi2
(declare (salience 8))
?a
(retract ?a)
(assert (lista_unchi $?x1 $?x2 ?x ?z))
)
(defrule afisare_unchi
?a<-(optiune_cauta 5)
?b<-(lista_unchi $?h )
?c
(printout t “Unchi/matuse: ” $?h crlf)
(retract ?a)
(retract ?b)
(retract ?c)
)
(defrule cauta_nepoti
(optiune_cauta 6)
(not (lista_nepoti $?))
=>
(printout t “Nepotii pentru?” crlf)
(assert (bunic (read)))
(assert (lista_nepoti))
)
(defrule completeaza_nepoti
(declare (salience 10))
?a<-(bunic ?x)
?b
(retract ?b)
(assert (lista_nepoti $?h ?z))
)
(defrule afisare_nepoti
?a<-(optiune_cauta 6)
?b<-(lista_nepoti $?h )
?c
(printout t “Nepoti: ” $?h crlf)
(retract ?a)
(retract ?b)
(retract ?c)
)
(defrule cauta_iesire
?a<-(optiune_cauta 7)
?b
(retract ?a)
(retract ?b)
)
(defrule meniu_afisare
(optiune_principal 3)
(not (optiune_afisare ?))
=>
(printout t “1. Afisare frati” crlf)
(printout t “2. Afisare soti” crlf)
(printout t “3. Afisare parinti” crlf)
(printout t “4. Afisare bunici/nepoti” crlf)
(printout t “5. Iesire” crlf)
(printout t “Dati optiunea:” crlf)
(assert (optiune_afisare (read)))
)
(defrule validare_afisare
?a
(printout t “Nu ati introdus corect optiunea!” crlf)
(retract ?a)
(printout t “Introduceti din nou optiunea:” crlf)
(assert (optiune_afisare (read)))
)
(defrule afiseaza_frati1
?a
(assert (afiseaza_frati))
(retract ?a)
)
(defrule afiseaza_frati2
(declare (salience 10))
?a
(printout t ?x ” este fratele/sora lui ” ?y crlf)
)
(defrule afiseaza_soti1
?a
(assert (afiseaza_soti))
(retract ?a)
)
(defrule afiseaza_soti2
(declare (salience 10))
?a
(printout t ?x ” este casatorit(a) cu ” ?y crlf)
)
(defrule afiseaza_parinti1
?a
(assert (afiseaza_parinti))
(retract ?a)
)
(defrule afiseaza_parinti2
(declare (salience 11))
?a
(printout t “Parintii lui ” ?x ” sunt ” ?y ” si ” ?z crlf)
)
(defrule afiseaza_bunici1
?a
(assert (afiseaza_bunici))
(retract ?a)
)
(defrule afiseaza_bunici2
(declare (salience 10))
?a
(printout t ?y ” si ” ?k ” sunt bunicii lui ” ?z crlf)
)
(defrule afisare_iesire
?a<-(optiune_afisare 5)
?b
(retract ?a)
(retract ?b)
)
Altele
Exemplu
(deffacts fapte
(curs ia pbr)
)
(defrule afisare
(curs $? ?x $?)
=>
(printout t “curs:” ?x crlf))
Exemplu
(deffacts fapte
(curs ia pbr)
)
(defrule afisare
(curs $?x)
=>
(printout t “curs:” $?x crlf))
Exemplu
(deffacts fapte
(curs ia)
(curs pbr)
)
(defrule afisare
(curs ?x)
=>
(printout t “curs:” ?x crlf))
Exemplu
(deffacts fapte
(curs ia pbr)
(prof ia cristea)
(prof pbr cristea2)
)
(defrule afisare
(curs $? ?x $?)
(prof ?x ?y)
=>
(printout t “cursul: ” ?x ” are ca profesor: ” ?y crlf))
Exemplu
(deffacts fapte
(curs ia pbr)
)
(defrule afisare
(curs $? ?x $?)
(not (prof ?x ?))
=>
(printout t “Dati prof pt: ” ?x crlf)
(assert (prof ?x (read)))
)
Laboratorul 1
martie 12, 2009 la 9:43 am (Anul III, Facultatea de Informatica Iasi, Programare bazata pe reguli, Semestru` II)
Tags: CLIPS, Forme geometrice, Programare bazata pe reguli
Varianta 1
(deffacts a
(forma patrulater)
(unghi drept)
(laturi egale)
)
(defrule patrat
(forma patrulater)
(unghi drept)
(laturi egale)
=>
(assert (patrat))
)
(defrule dreptunghi
(forma patrulater)
(unghi drept)
(not (laturi egale))
=>
(assert (dreptunghi))
)
(defrule trapez
(forma patrulater)
(not (unghi drept))
(not (laturi egale))
=>
(assert (trapez))
)
(defrule altceva
(not (forma patrulater))
(not (unghi drept))
(not (laturi egale))
=>
(assert (altceva))
)
(defrule romb
(forma patrulater)
(not (unghi drept))
(laturi egale)
=>
(assert (romb))
)
Varianta 2
(deffacts a (patrulater da) (laturiegale nu) (unghidrept da))
(defrule test1D (patrulater da) => (assert (dotest2)))
(defrule test1N (patrulater nu) => (assert (altceva)))
(defrule test2D (dotest2)(unghidrept da) => (assert (dotest3)))
(defrule test2N (dotest2) (unghidrept nu) => (assert (dotest4)))
(defrule test3D (dotest3) (laturiegale da) => (assert (patrat)))
(defrule test3N (dotest3) (laturiegale nu) => (assert (dreptunghi)))
(defrule test4D (dotest4) (laturiegale da) => (assert (romb)))
(defrule test4N (dotest4) (laturiegale nu) => (assert (trapez)))
Varianta 3
(deffacts s (forma patrulater) (unghiuri drepte))
(defrule a (forma patrulater) => (assert (unghi)))
(defrule b (not (forma patrulater)) => (assert (altceva)))
(defrule c (unghi) (or (unghiuri drepte) (not (unghiuri drepte))) => (assert (laturi)))
(defrule e (laturi) (laturi egale) (unghiuri drepte) => (assert (patrat)))
(defrule f (laturi) (laturi egale) (not(unghiuri drepte)) => (assert (trapez)))
(defrule d (laturi) (not (laturi egale)) (unghiuri drepte) => (assert (dreptunghi)))
(defrule g (laturi) (not(laturi egale)) (not(unghiuri drepte)) => (assert (patrat)))
Varianta 4
(deffacts f
(forma patrulater)
(unghiuri nedrepte)
(laturi inegale)
)
(defrule patrat
(forma patrulater)
(unghiuri drepte)
(laturi egale)
=>
(assert (patrat))
)
(defrule dreptunghi
(forma patrulater)
(unghiuri drepte)
(laturi inegale)
=>
(assert (dreptunghi))
)
(defrule romb
(forma patrulater)
(unghiuri nedrepte)
(laturi egale)
=>
(assert (romb))
)
(defrule trapez
(forma patrulater)
(unghiuri nedrepte)
(laturi inegale)
=>
(assert (trapez))
)
(defrule altceva
(forma nepatrulater)
(unghiuri nedrepte)
(laturi inegale)
=>
(assert (altceva))
)
Varianta 5
(deffacts fapte
(forma patrulater)
)
(defrule r1
?f
(assert (unghiuridrepte))
(retract ?f)
)
(defrule r2
(unghiuridrepte)
=>
(assert (laturiegale))
)
(defrule r3
?l
(assert (patrat))
(retract ?l)
)
(defrule r4
(not(laturiegale))
?u
(assert (dreptunghi))
(retract ?u)
)
(defrule r5
(not(unghiuridrepte))
=>
(assert (laturiegale2))
)
(defrule r6
?le
(assert (romb))
(retract ?le)
)
(defrule r7
(not(laturiegale2))
=>
(assert (trapez))
)
(defrule r8
(not(forma patrulater))
=>
(assert (altceva))
)
Varianta 6
(deffacts fapte
(forma patrulater)
(unghiuri drepte)
(laturi neegale)
)
(defrule r1
?f
(assert (unghiuridrepte))
(retract ?f)
)
(defrule r2
?u<-(unghiuridrepte)
?u2
(assert (laturiegale1))
(retract ?u)
(retract ?u2)
)
(defrule r3
?u
(assert (laturiegale2))
(retract ?u)
)
(defrule r4
?l<-(laturiegale1)
?l2
(assert (patrat))
(retract ?l)
(retract ?l2)
)
(defrule r5
?l
(assert (dreptunghi))
(retract ?l)
)
(defrule r6
?l
(assert (romb))
(retract ?l)
)
(defrule r7
?l
(assert (trapez))
(retract ?l)
)
(defrule r8
(not (or (patrat) (dreptunghi) (trapez) (romb)))
=>
(assert (altceva))
)
Varianta 7
(deffacts fapte
(patrulater da)
(unghiuri da)
(laturi nu)
)
(defrule r1
(patrulater da)
=>
(assert (unghi))
)
(defrule r2
(unghi)
=>
(assert (laturi))
)
(defrule r3
(laturi)
(unghiuri da)
(laturi da)
=>
(assert (patrat))
)
(defrule r4
(laturi)
(unghiuri da)
(laturi nu)
=>
(assert (dreptunghi))
)
(defrule r5
(laturi)
(unghiuri nu)
(laturi da)
=>
(assert (romb))
)
(defrule r6
(laturi)
(unghiuri nu)
(laturi nu)
=>
(assert (trapez))
)
(defrule reg7
(patrulater nu)
=>
(assert (altceva))
)
Varianta 8
(deffacts fapte (stareinitiala))
(defrule patrulater
(stareinitiala)
=>
(printout t “Este patrulater?”)
(assert (patrulater (read)))
)
(defrule unghiuridrepte
(patrulater da)
=>
(printout t “Are ungiuri drepte?”)
(assert (unghiuridrepte (read)))
)
(defrule laturiegale
(unghiuridrepte ?)
=>
(printout t “Are laturi egale?”)
(assert (laturiegale (read)))
)
(defrule patrat
(unghiuridrepte da)
(laturiegale da)
=>(printout t “Este patrat!”)
)
(defrule dreptughi
(unghiuridrepte da)
(laturiegale nu)
=>(printout t “Este dreptunghi!”)
)
(defrule romb
(unghiuridrepte nu)
(laturiegale da)
=>(printout t “Este romb!”)
)
(defrule trapez
(unghiuridrepte nu)
(laturiegale nu)
=>(printout t “Este trapez!”)
)
(defrule altceva
(patrulater nu)
=>(printout t “Este altceva!”)
)
FTP Remoting
ianuarie 18, 2009 la 6:15 pm (Anul III, C#, Facultatea de Informatica Iasi, Semestrul I)
Tags: .NET, C++, Client, Download, FTP, installutil, Remoting, Upload, Visual Studio 2008
Download: source code
Folosi-ti FileZilla pentru serverul de FTP.
1 ) Dezarhiva-ti sursa
2 ) Deschide-ti proiectul Remoting.sln
3 ) Selecta-ti WindowsService1 ca StartUp Project(click dreapta pe el) apoi Build (F6)
4 ) Start -> Programs -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Promt -> Apare o fereastra
5 ) Introduce-ti in fereastra de la Command Promt calea unde ati dezarhivat proiectul, apoi intra-ti in Remoting->WindowsService1->bin->Release si executa-ti urmatoarea comanda:
installutil WindowsService1.sln
Va aparea:
The Commit phase completed successfully.
The transacted install has completed.
6 ) Click dreapta pe My Computer -> Manage : Apare o fereastra Computer Management
In Services and Application selecta-ti Services, cauta-ti AlexFTP si da-ti Start.
7 ) In Visual Studio selecta-ti acum Remoting ca fiind StartUp Project si rulati-l (CTRL+F5).
In fereastra care apare pute-ti selecta serverul (poate fi si local host daca folositi FileZilla), portul (nu prea are importanta), userul si passul pentru a va putea conecta la server.
Butonul Files este pentru a afisa lista de fisiere de e server din directorul curent.
Pentru Download se va mentiona in TextBox numele fisierului care se doreste a fi downloadat si apoi se apasa pe butonul Download.
ListBoxul retine o istorie a operatiilor executate.
8 ) In directorul Remoting al proiectului -> bin -> Release se gaseste un fisier alex.xml in care se va retine istoria operatiilor.
9 ) La sfarsit:
Executa-ti urmatoarea comanda in fereastra de la Command promt:
installutil /u WindowsService1.sln
Va aparea:
The uninstall has completed.
Windows Communication Foundation
ianuarie 18, 2009 la 5:13 pm (Anul III, C#, Facultatea de Informatica Iasi, Semestrul I)
Tags: .NET, C++, DataContract, Exemple, Visual Studio 2008, WCF, Windows Communication Foundation
Download: source code
Instructiuni:
1 ) Dezarhiva-ti sursa
2 ) Deschide-ti proiectul WCF.sln, selecta-ti WCFService ca StartUp Project(click dreapta pe el) si rulati-l (CTRL + F5) .. apare o fereastra cu 2 butoane – apasa-ti Start
Important: nu inchide-ti fereastra serverului pana la sfarsit !!!
3 ) Start -> Programs -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Promt -> Apare o fereastra
4 ) Introduce-ti in fereastra de la Command Promt calea unde ati dezarhivat proiectul, apoi intra-ti in WCFService/Bin/Debug si rula-ti a.bat
sau
in loc sa rula-ti a.bat utiliza-ti urmatoarea comanda svcutil http://localhost:8001/MyService /out: Proxy.cs
Va aparea:
Generating files…
cale_proiect\WCF2\WCFService\bin\Debug\Proxy.cs
cale_proiect\WCF2\WCFService\bin\Debug\output.config
5 )In Visual Studio selecta-ti acum WCF ca fiind StartUp Project .. sterge-ti Proxy.cs (click dreapta pe Proxy.cs si Delete) .. click dreapta pe WCFClient -> Add-> Existing Item -> In WCFService -> bin-> Debug ve-ti gasi fisierul Proxy.cs pe care il ve-ti deschide .. acesta va aparea in proiect la WCFClient in locul celui sters
6 )Rula-ti Clientul (CTRL+F5)
7 ) In cele doua casute de la Name introduce-ti 2 siruri de caractere (2 nume) .. in casuta sub IpAddress trebuie sa ave-ti ip-ul din fereastra care a aparut in urma rularii serverului la Service URL (de exemplu: Service URL: net.tcp://127.0.0.1:8000/MyService -> va trebui introdus 127.0.0.1) iar dedesupt in cele doua casute 2 numere
8 ) Apasa-ti pe butonul Connect and Send Message
Guillou-Guisquater Scheme (GQ)
ianuarie 9, 2009 la 3:45 pm (Anul III, Facultatea de Informatica Iasi, Securitatea informatiei, Semestrul I)
Tags: GQ, Guillou Guisquater, java, scheme, sha-1
Project TA
Class Main.java
import java.util.Random;
import java.io.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class Main extends Thread {
static BigInteger p = new BigInteger(”0″), q = new BigInteger(”0″), n = new BigInteger(”0″);
static BigInteger t = new BigInteger(”0″), b = new BigInteger(”0″), s = new BigInteger(”0″);
static Random random = new Random();
static BigInteger ZERO = new BigInteger(”0″);
static BigInteger UNU = new BigInteger(”1″);
static BigInteger DOI = new BigInteger(”2″);
String Ja2, Ia, read;
SHA sha = new SHA();
BigInteger Ja,Ja_inv,sa;
private static ServerSocket serverSocket = null;
private Socket clientSocket = null;
public static final int PORT = 1987;
static void getParameters() {
while (n.bitLength() <= 160) {
while (p.compareTo(UNU) == -1 || q.compareTo(UNU) == -1) {
p = BigInteger.probablePrime(128, random);
q = BigInteger.probablePrime(128, random);
}
n = p.multiply(q);
}
t = p.subtract(UNU).multiply(q.subtract(UNU));
while (b.compareTo(new BigInteger(”3″)) == -1 || b.gcd(t).compareTo(UNU) != 0 || b.compareTo(t.subtract(UNU)) == 1) {
b = BigInteger.probablePrime(t.subtract(UNU).bitLength(), random);
}
s = b.modInverse(t);
}
static void afisareParam() {
System.out.println(”p:” + p);
System.out.println(”q:” + q);
System.out.println(”n:” + n + ” lungime:” + n.bitLength());
System.out.println(”t:” + t);
System.out.println(”b:” + b);
System.out.println(”gcd(b,t)=” + b.gcd(t));
System.out.println(”s:” + s);
System.out.println(”b*s=” + b.multiply(s).mod(t) + ” mod t”);
}
public void run() {
//Executa solicitarea clientului
try {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
read = in.readLine();
System.out.println(read);
out.write(”Hello from TA”+”\n”);
out.flush();
Ia = in.readLine();
System.out.println(”Ia: ” + Ia);
Ja2 = sha.SHA2(Ia);
System.out.println(”Ja string: ” + Ja2);
Ja = sha.SHA1(Ia);
System.out.println(”Ja BigInteger: ” + Ja + ” lungime: “+ Ja.bitLength());
Ja_inv=Ja.modInverse(n);
System.out.println(”Ja_inv: ” + Ja_inv);
sa=Ja_inv.modPow(s, n);
System.out.println(”s_a: ” + sa);
out.write(n+”\n”);
out.write(b+”\n”);
out.write(sa+”\n”);
out.flush();
} catch (Exception e) {
System.err.println(e);
} finally {
// Inchid socketul deschis pentru clientul curent
try {
clientSocket.close();
} catch (IOException e) {
System.err.println(”Socketul nu poate fi inchis \n” + e);
}
}
}
public Main() throws IOException {
getParameters();
afisareParam();
// while (true) {
serverSocket = new ServerSocket(PORT);
System.out.println(” TA -> initiated!”);
try {
//Asteapta un client
clientSocket = serverSocket.accept();
//Executa solicitarea clientului intr-un fir de executie
new Thread(this).start();
} finally {
serverSocket.close();
System.out.println(” TA -> finished!”);
}
// }
}
public static void main(String[] args) throws IOException {
Main m = new Main();
}
}
Class SHA.java
package TA;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA {
private static String convertToHex(byte[] data) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < data.length; i++) {
int halfbyte = (data[i] >>> 4) & 0×0F;
int two_halfs = 0;
do {
if ((0 <= halfbyte) && (halfbyte <= 9)) {
buf.append((char) (’0′ + halfbyte));
} else {
buf.append((char) (’a’ + (halfbyte – 10)));
}
halfbyte = data[i] & 0×0F;
} while (two_halfs++ < 1);
}
return buf.toString();
}
public static BigInteger convertToBigInteger(byte[] input) {
BigInteger r = new BigInteger(input);
return r;
}
public static BigInteger SHA1(String text)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md;
md = MessageDigest.getInstance(”SHA-1″);
byte[] sha1hash = new byte[40];
md.update(text.getBytes(”iso-8859-1″), 0, text.length());
sha1hash = md.digest();
return convertToBigInteger(sha1hash);
}
public static String SHA2(String text)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md;
md = MessageDigest.getInstance(”SHA-1″);
byte[] sha1hash = new byte[40];
md.update(text.getBytes(”iso-8859-1″), 0, text.length());
sha1hash = md.digest();
return convertToHex(sha1hash);
}
}
Project A
Class Main.java
package A;
import java.net.*;
import java.io.*;
import java.math.BigInteger;
import java.util.Random;
public class Main {
String identitate = “Eu sunt A”,raspuns=”accept”;
String Ja2, sa2, n2, b2,r2;
BigInteger Ja, sa, n, b, k = new BigInteger(”0″),alfa= new BigInteger(”0″),r,y=new BigInteger(”0″);
byte[] aux;
SHA sha = new SHA();
Random random = new Random();
int NR_VERIFICARI,incercari=0;
static BigInteger ZERO = new BigInteger(”0″);
static BigInteger UNU = new BigInteger(”1″);
static BigInteger DOI = new BigInteger(”2″);
public void Communication() throws Exception {
System.out.println(” A -> initiated!”);
String adresaServer = “127.0.0.1″;
int PORT = 1987;
Socket clientSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
clientSocket = new Socket(adresaServer, PORT);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out.write(”Hello from A” + “\n”);
out.write(identitate + “\n”);
out.flush();
String read = in.readLine();
System.out.println(read);
Ja2 = sha.SHA2(identitate);
System.out.println(”Ja string: ” + Ja2);
Ja = sha.SHA1(identitate);
System.out.println(”Ja BigInteger: ” + Ja);
n2 = in.readLine();
n = new BigInteger(n2, 10);
System.out.println(”n: ” + n);
b2 = in.readLine();
b = new BigInteger(b2, 10);
System.out.println(”b: ” + b);
sa2 = in.readLine();
sa = new BigInteger(sa2, 10);
System.out.println(”sa: ” + sa);
} catch (Exception e) {
System.err.println(e);
System.exit(1);
} finally {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
if (clientSocket != null) {
clientSocket.close();
}
}
clientSocket = null;
out = null;
in = null;
PORT = 1988;
try {
clientSocket = new Socket(adresaServer, PORT);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String read = in.readLine();
System.out.println(read);
NR_VERIFICARI=Integer.parseInt(in.readLine());
System.out.println(”Nr verificari: “+ NR_VERIFICARI);
out.write(”Hello from A” + “\n”);
out.flush();
while(raspuns.compareTo(”accept”)==0 && incercari<NR_VERIFICARI)
{
incercari++;
out.write(identitate + “\n”);
out.flush();
int lungime = n.bitLength();
int random_lungime = 0;
while (k.compareTo(UNU) == -1 || k.compareTo(n) >= 0) {
while (random_lungime == 0) {
random_lungime = random.nextInt(lungime);
}
k = BigInteger.probablePrime(random_lungime, random);
}
System.out.println(”k: ” + k);
alfa=k.modPow(b, n);
System.out.println(”alfa: ” + alfa);
out.write(n+”\n”);
out.write(b+”\n”);
out.write(alfa+”\n”);
out.flush();
r2 = in.readLine();
r = new BigInteger(r2, 10);
System.out.println(”r: ” + r);
y=sa.modPow(r, n).multiply(k).mod(n);
System.out.println(”y: ” + y);
out.write(y+”\n”);
out.flush();
raspuns=in.readLine();
System.out.println(”raspuns “+raspuns);
}
} catch (Exception e) {
System.err.println(e);
System.exit(1);
} finally {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
if (clientSocket != null) {
clientSocket.close();
}
}
System.out.println(” A -> finished!”);
}
public static void main(String[] args) throws Exception {
Main m = new Main();
m.Communication();
}
}
Class SHA – la fel ca cea de la TA
Project B
Class Main.java
package B;
import java.math.BigInteger;
import java.util.Random;
import java.io.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class Main extends Thread {
static Random random = new Random();
static SHA sha = new SHA();
static BigInteger ZERO = new BigInteger(”0″);
static BigInteger UNU = new BigInteger(”1″);
static BigInteger DOI = new BigInteger(”2″);
BigInteger verificare = new BigInteger(”0″), Ja, alfa = new BigInteger(”0″), n, b, r = new BigInteger(”0″), y = new BigInteger(”0″);
String Ia, read, alfa2, n2, b2, y2, Ja2;
private static ServerSocket serverSocket = null;
private Socket clientSocket = null;
public static final int PORT = 1988;
int NR_VERIFICARI = 4;
boolean respins = false;
public void run() {
int accepta = 0;
//Executa solicitarea clientului
try {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
out.write(”Hello from B” + “\n”);
out.write(NR_VERIFICARI+”\n”);
out.flush();
read = in.readLine();
System.out.println(read);
while (accepta < NR_VERIFICARI && respins == false) {
Ia = in.readLine();
System.out.println(”Ia: ” + Ia);
n2 = in.readLine();
n = new BigInteger(n2, 10);
System.out.println(”n: ” + n);
b2 = in.readLine();
b = new BigInteger(b2, 10);
System.out.println(”b: ” + b);
alfa2 = in.readLine();
alfa = new BigInteger(alfa2, 10);
System.out.println(”alfa: ” + alfa);
int lungime = n.bitLength();
int random_lungime = 0;
while (r.compareTo(UNU) == -1 || r.compareTo(b) > 0) {
while (random_lungime == 0) {
random_lungime = random.nextInt(lungime);
}
r = BigInteger.probablePrime(random_lungime, random);
}
System.out.println(”r: ” + r);
out.write(r + “\n”);
out.flush();
y2 = in.readLine();
y = new BigInteger(y2, 10);
System.out.println(”y: ” + y);
Ja2 = sha.SHA2(Ia);
System.out.println(”Ja: ” + Ja2);
Ja = sha.SHA1(Ia);
System.out.println(”Ja: ” + Ja);
verificare = Ja.modPow(r, n).multiply(y.modPow(b, n)).mod(n);
System.out.println(”Verificare: ” + verificare);
if (verificare.compareTo(alfa) == 0) {
accepta++;
System.out.println(”Accept !!! “);
out.write(”accept” + “\n”);
out.flush();
} else {
respins = true;
out.write(”respins” + “\n”);
out.flush();
System.out.println(”Reject !!! “);
}
}
if(accepta==NR_VERIFICARI)
{
System.out.println(”IDENTIFICARE REUSITA !!! “);
}
else
{
System.out.println(”IDENTIFICARE ESUATA !!! “);
}
} catch (Exception e) {
System.err.println(e);
} finally {
// Inchid socketul deschis pentru clientul curent
try {
clientSocket.close();
} catch (IOException e) {
System.err.println(”Socketul nu poate fi inchis \n” + e);
}
}
}
public Main() throws IOException {
// while (true) {
serverSocket = new ServerSocket(PORT);
try {
//Asteapta un client
clientSocket = serverSocket.accept();
System.out.println(” B -> initiated!”);
//Executa solicitarea clientului intr-un fir de executie
new Thread(this).start();
} finally {
serverSocket.close();
System.out.println(” B -> finished!”);
}
// }
}
public static void main(String[] args) throws IOException {
Main m = new Main();
}
}
Class SHA - la fel ca la TA
ElGamal
noiembrie 8, 2008 la 3:17 pm (Anul III, Facultatea de Informatica Iasi, Securitatea informatiei, Semestrul I)
Tags: Attack, C++, NTL, ZZ
#include<conio.h>
#include<NTL/ZZ.h>
#include<fstream>
using namespace std;
using namespace NTL;
long l,k;
class A
{
ZZ p,q,a,alfa,alfa2,beta,vector2;
unsigned char output[];
public:
A()
{l=0;}
void Key()
{
while(l<20)
l=RandomBnd(200);
cout<<endl<<”l=”<<l;
//generam q
GenGermainPrime(q,l,80);
cout<<endl<<”q=”<<q;
//aflam p
p=2*q+1;
cout<<endl<<”p=”<<p;
//generam a
while(a<1)
a=RandomBnd(q-2);
cout<<endl<<”a=”<<a;
//generam alfa,alfa2 rad primitiva
while(alfa2<2 && PowerMod(alfa2,2,p)!=1 && PowerMod(alfa2,q,p)!=1)
alfa2 = RandomBnd(q-2);
alfa=PowerMod(alfa2,(p-1)/q,p);
cout<<endl<<”alfa=”<<alfa;
//generam beta
PowerMod(beta,alfa,a,p);
cout<<endl<<”beta=”<<beta;
}
ZZ get_p()
{ return this->p; }
ZZ get_q()
{ return this->q; }
ZZ get_alfa()
{ return this->alfa; }
ZZ get_beta()
{ return this->beta; }
void outputText()
{
BytesFromZZ(output,vector2,k);
cout<<endl<<”vector_output=”<<vector2;
cout<<endl<<”output=”<<output;
outputText(”output.txt”);
}
void Decriptare(ZZ gama, ZZ delta)
{
ZZ m,h;
PowerMod(m,gama,a,p);
InvMod(h,m,p);
MulMod(vector2,h,delta,p);
}
void outputText(char *file)
{
/*ofstream on(file, ios::out);
on<<output;
on.close();*/
FILE *outfile=fopen(”output.txt”, “a” );
feof(outfile);
for(int j=0;j<k;j++){
fprintf(outfile,”%c”,output[j]);}
fclose(outfile);
}
};
class B
{
ZZ p,q,alfa,beta,lg,vector,r,delta,gama,z;
long i;
unsigned char input1[1000];
public:
B(A c,char *file)
{
for(int m=0;m<1000;m++) input1[m]=”;
i=0;
p=c.get_p();
q=c.get_q();
alfa=c.get_alfa();
beta=c.get_beta();
inputText(file);
while(input1[0]!=”)
{
k=0;vector=0;
while(NumBits(vector)<NumBits(p)-4 && input1[k]!=”)
{ ZZFromBytes(vector,input1,k); k++;}
genereaza(vector);
c.Decriptare(gama,delta);//a decripteaza textul
c.outputText();//a afiseaza textul
if(input1[k]!=”) {
k–;
for(int h=0;h<1000-k;h++)
input1[h]=input1[h+k];
for(int h=1000-k;h<1000;h++)
input1[h]=”;
}
else {for(int h=0;h<k;h++) input1[h]=”;}
}
/* BUN long k=0;
while(NumBits(vector)<=NumBits(p) && input1[k]!=”)
{ ZZFromBytes(vector,input1,k); k++;}
cout<<endl<<”vector input=”<<input1<<endl;
cout<<endl<<”p*=”<<NumBits(p)<<endl;
cout<<endl<<”v*=”<<NumBits(vector)<<endl;
genereaza();
c.Decriptare(gama,delta);//a decripteaza textul
c.outputText();//a afiseaza textul*/
}
void genereaza(ZZ vector)
{
//generam r
/*while(r<1)
r=RandomBnd(q-2);*/
r=315261752;
cout<<endl<<”r=”<<r;
//generam gama
PowerMod(gama,alfa,r,p);
cout<<endl<<”gama=”<<gama;
//generam omega
PowerMod(z,beta,r,p);
MulMod(delta,vector,z,p);
cout<<endl<<”delta=”<<delta;
}
void inputText(char *file)
{
//citim textul in input1;
ifstream in(file, ios::in);
cout<<endl;
while(!in.eof())
{
in>>input1[i];
i++;
}
i–;
in.close();
}
ZZ get_gama()
{return gama;}
ZZ get_delta()
{return delta;}
ZZ get_vector()
{return vector;}
};
class C
{
ZZ m,h,vector2,p;
unsigned char output[];
public:
C(A c)
{
p=c.get_p();
}
void Decriptare(ZZ gama1, ZZ delta1, ZZ gama2, ZZ delta2, ZZ vector)
{
InvMod(h,delta1,p);
MulMod(m,h,delta2,p);
MulMod(vector2,vector,m,p);
}
void outputText()
{
BytesFromZZ(output,vector2,36);
cout<<endl<<”vector_output=”<<vector2;
cout<<endl<<”output=”<<output;
}
};
void main()
{
A a; //cel care primeste ..
a.Key();//se genereaza cheia publica si cheia privata
B b(a,”input.txt”);//cel care trimite .. va lua cheia publica a celui caruia trebuie sa ii trimita mesajul
cout<<endl<<endl<<”****************** ATAC ***************************”<<endl;
B d(a,”input2.txt”);
C c(a);
c.Decriptare(b.get_gama(),b.get_delta(),d.get_gama(),d.get_delta(),b.get_vector());
c.outputText();
_getch();
}
Fisiere:
- input.txt : advwqgasghvdhavgdacwwqvdsgdhvahdvawy
- input2.txt
Atac pentru acelasi “r”.




