Solve challenge 6.
This commit is contained in:
32
src/set1.rs
32
src/set1.rs
@@ -31,8 +31,8 @@ pub fn challenge3() {
|
|||||||
let a = Bytes::from_hex("1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736");
|
let a = Bytes::from_hex("1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736");
|
||||||
let mut h: Vec<Bytes> = (0..=255).map(|i| Bytes::xor_byte(&a, i)).collect();
|
let mut h: Vec<Bytes> = (0..=255).map(|i| Bytes::xor_byte(&a, i)).collect();
|
||||||
h.sort_by(|a, b| a.ascii_score().partial_cmp(&b.ascii_score()).unwrap());
|
h.sort_by(|a, b| a.ascii_score().partial_cmp(&b.ascii_score()).unwrap());
|
||||||
let h: Vec<Bytes> = h.into_iter().filter(|b| b.is_ascii()).collect();
|
// let h: Vec<Bytes> = h.into_iter().filter(|b| b.is_ascii()).collect();
|
||||||
let r = h[h.len() - 1].to_utf8();
|
let r = h.last().unwrap().to_utf8();
|
||||||
println!("[okay] Challenge 3: {}", r);
|
println!("[okay] Challenge 3: {}", r);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,8 +125,34 @@ pub fn challenge6() {
|
|||||||
lowest_size
|
lowest_size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn transpose(Bytes(v): &Bytes, size: usize) -> Vec<Bytes> {
|
||||||
|
let mut result = vec![];
|
||||||
|
for i in 0..size {
|
||||||
|
let mut column = vec![];
|
||||||
|
for j in (i..v.len()).step_by(size) {
|
||||||
|
column.push(v[j]);
|
||||||
|
}
|
||||||
|
result.push(Bytes(column));
|
||||||
|
}
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn guess_key(bytes: &Bytes) -> u8 {
|
||||||
|
let mut h: Vec<(Bytes, u8)> = (0..=255).map(|i| (Bytes::xor_byte(bytes, i), i)).collect();
|
||||||
|
h.sort_by(|a, b| a.0.ascii_score().partial_cmp(&b.0.ascii_score()).unwrap());
|
||||||
|
h.last().unwrap().1
|
||||||
|
}
|
||||||
|
|
||||||
_test_roundtrip();
|
_test_roundtrip();
|
||||||
let bytes = read("data/6.txt");
|
let bytes = read("data/6.txt");
|
||||||
let key_size = guess_key_size(&bytes);
|
let key_size = guess_key_size(&bytes);
|
||||||
println!("[open] Challenge 6: guessed_key_size={}", key_size);
|
let bytes_tranposed = transpose(&bytes, key_size);
|
||||||
|
let key = Bytes(bytes_tranposed.iter().map(|b| guess_key(&b)).collect());
|
||||||
|
let msg = Bytes::xor_cycle(&bytes, &key);
|
||||||
|
|
||||||
|
let partial_msg = Bytes(msg.0[..20].to_vec()).to_utf8();
|
||||||
|
println!(
|
||||||
|
"[okay] Challenge 6: size={} msg={}...",
|
||||||
|
key_size, partial_msg
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user