Start to implement challenge 19 in Rust which requires some learning.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
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