11use crate :: structuri:: * ;
2-
2+ use std:: fs:: { File , create_dir_all} ;
3+ use std:: io:: Write ;
4+ use std:: path:: Path ;
35
46const NR_BLOCKS : usize = 4 ;
57
8+ #[ allow( dead_code) ]
9+ fn print_hex_blocks ( blocks : & [ Vec < u8 > ] ) {
10+ for i in 0 ..blocks. len ( ) {
11+ print ! ( "Blocul {}: " , i) ;
12+ for j in 0 ..blocks[ i] . len ( ) {
13+ print ! ( "0x{:02x}" , blocks[ i] [ j] ) ;
14+ if j != blocks[ i] . len ( ) - 1 {
15+ print ! ( " " ) ;
16+ } else {
17+ println ! ( "" )
18+ }
19+ }
20+ }
21+ }
22+
623fn xor ( block : & [ u8 ] , key : & [ u8 ] ) -> Vec < u8 > {
724 block
825 . iter ( )
@@ -66,7 +83,42 @@ fn split_into_blocks(secretariat: &Secretariat) -> Vec<Vec<u8>> {
6683}
6784
6885
69- pub fn cripteaza_studenti ( secretariat : & Secretariat , key : & str , iv : & str , _cale_output : & str ) {
86+
87+ fn fwrite_blocks ( blocks : & [ Vec < u8 > ] , cale_output : & str ) {
88+ let path = Path :: new ( cale_output) ;
89+
90+ // Creeaza directoarele parinte daca nu exista
91+ if let Some ( parent) = path. parent ( ) {
92+ if let Err ( e) = create_dir_all ( parent) {
93+ eprintln ! ( "[EROARE] la crearea directoarelor {}: {}" , parent. display( ) , e) ;
94+ return ;
95+ }
96+ }
97+
98+ // Deschide fisierul pentru scriere
99+ let mut file = match File :: create ( & path) {
100+ Ok ( f) => f,
101+ Err ( e) => {
102+ eprintln ! ( "[EROARE] la deschiderea fisierului {}: {}" , path. display( ) , e) ;
103+ return ;
104+ }
105+ } ;
106+
107+ // Scrie fiecare bloc, byte cu byte
108+ for block in blocks {
109+ if let Err ( e) = file. write_all ( & block) {
110+ eprintln ! ( "[EROARE] la scrierea unui bloc: {}" , e) ;
111+ return ;
112+ }
113+ }
114+
115+ // Flush pentru a te asigura ca tot ce e scris ajunge pe disc
116+ if let Err ( e) = file. flush ( ) {
117+ eprintln ! ( "[EROARE] la scrierea in fisier: {}" , e) ;
118+ }
119+ }
120+
121+ pub fn cripteaza_studenti ( secretariat : & Secretariat , key : & str , iv : & str , cale_output : & str ) {
70122 let mut blocks: Vec < Vec < u8 > > = split_into_blocks ( secretariat) ;
71123
72124 let bytes_key: Vec < u8 > = key. as_bytes ( ) . to_vec ( ) ;
@@ -81,4 +133,6 @@ pub fn cripteaza_studenti(secretariat: &Secretariat, key: &str, iv: &str, _cale_
81133 blocks[ i] = xor ( & blocks[ i] , & bytes_key) ;
82134 blocks[ i] = p_box ( & blocks[ i] ) ;
83135 }
84- }
136+
137+ fwrite_blocks ( & blocks, cale_output) ;
138+ }
0 commit comments