Start to implement challenge 19 in Rust which requires some learning.
This commit is contained in:
30
src/set3.rs
30
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<u8>) -> HashMap<u8, RefCell<HashSet<u8>>> {
|
||||
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<Bytes>) -> Vec<Vec<u8>> {
|
||||
vec![vec![]]
|
||||
}
|
||||
|
||||
let mut letters: Vec<u8> = (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.");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user