Start to implement challenge 19 in Rust which requires some learning.
This commit is contained in:
@@ -9,7 +9,7 @@ mod set2;
|
|||||||
mod set3;
|
mod set3;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
const RUN_ALL: bool = true;
|
const RUN_ALL: bool = false;
|
||||||
if RUN_ALL {
|
if RUN_ALL {
|
||||||
set1::challenge1();
|
set1::challenge1();
|
||||||
set1::challenge2();
|
set1::challenge2();
|
||||||
@@ -32,6 +32,6 @@ fn main() {
|
|||||||
set3::challenge19();
|
set3::challenge19();
|
||||||
set3::challenge20();
|
set3::challenge20();
|
||||||
} else {
|
} 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::cbc;
|
||||||
use crate::ctr;
|
use crate::ctr;
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
use std::cell::RefCell;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::collections::HashSet;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{BufRead, BufReader};
|
use std::io::{BufRead, BufReader};
|
||||||
|
|
||||||
@@ -133,6 +136,33 @@ pub fn challenge19() {
|
|||||||
data.push_str("\n");
|
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");
|
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.");
|
println!("[okay] Challenge 19: encrypted to data/19_enc.txt, attack in set3c19.py.");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user