diff --git a/src/main.rs b/src/main.rs index 5fb88ed..2979b3d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ mod set2; mod set3; fn main() { - const RUN_ALL: bool = true; + const RUN_ALL: bool = false; if RUN_ALL { set1::challenge1(); set1::challenge2(); @@ -32,6 +32,6 @@ fn main() { set3::challenge19(); set3::challenge20(); } else { - set3::challenge20(); + set3::challenge19(); } } diff --git a/src/set3.rs b/src/set3.rs index e00ce94..d8260b3 100644 --- a/src/set3.rs +++ b/src/set3.rs @@ -3,6 +3,9 @@ use crate::bytes_base64::BytesBase64; use crate::cbc; use crate::ctr; use rand::Rng; +use std::cell::RefCell; +use std::collections::HashMap; +use std::collections::HashSet; use std::fs; use std::io::{BufRead, BufReader}; @@ -133,6 +136,33 @@ pub fn challenge19() { data.push_str("\n"); } + fn xor_to_char_set(letters: &Vec) -> HashMap>> { + let mut h = HashMap::new(); + for i in 0..255_u8 { + h.insert(i, RefCell::new(HashSet::new())); + } + for c1 in letters { + for c2 in letters { + let xored = c1 ^ c2; + if let Some(h) = h.get(&xored) { + let mut h_mut = h.borrow_mut(); + h_mut.insert(*c1); + h_mut.insert(*c2); + }; + } + } + h + } + + fn _attack(_ciphers: Vec) -> Vec> { + vec![vec![]] + } + + let mut letters: Vec = (0..255_u8).filter(u8::is_ascii_alphabetic).collect(); + letters.append(&mut vec![b'_', b'-', b'.']); + let lookup = xor_to_char_set(&letters); + println!("{:?}", lookup); + fs::write("data/19_enc.txt", data).expect("Unable to write file"); println!("[okay] Challenge 19: encrypted to data/19_enc.txt, attack in set3c19.py."); }