summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2015-03-15 06:30:30 -0400
committerJesse Luehrs <doy@tozt.net>2015-03-15 06:30:38 -0400
commite297730510998b5c355e52ea3c4f14e4727d7d86 (patch)
treec40be28099d5c2c5ef7da81c6eb8c3e9aad34310 /src/lib.rs
parentd9e8984818f1fdf121b6304dd07d474ffa66dd5e (diff)
downloadmatasano-e297730510998b5c355e52ea3c4f14e4727d7d86.tar.gz
matasano-e297730510998b5c355e52ea3c4f14e4727d7d86.zip
problem 4
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/lib.rs b/src/lib.rs
index d4b4331..cd5fda7 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -50,6 +50,19 @@ pub fn crack_single_byte_xor (input: &[u8]) -> Vec<u8> {
return decrypted;
}
+pub fn find_single_byte_xor_encrypted_string (inputs: &[Vec<u8>]) -> Vec<u8> {
+ let mut min_diff = 100.0;
+ let mut best_decrypted = vec![];
+ for input in inputs {
+ let (decrypted, diff) = crack_single_byte_xor_with_confidence(input);
+ if diff < min_diff {
+ min_diff = diff;
+ best_decrypted = decrypted;
+ }
+ }
+ return best_decrypted;
+}
+
fn crack_single_byte_xor_with_confidence (input: &[u8]) -> (Vec<u8>, f64) {
let mut min_diff = 100.0;
let mut best_decrypted = vec![];
@@ -63,9 +76,6 @@ fn crack_single_byte_xor_with_confidence (input: &[u8]) -> (Vec<u8>, f64) {
if !decrypted.is_ascii() {
continue;
}
- if decrypted.iter().any(|&c| { c < 0x20 || c > 0x7E }) {
- continue;
- }
let lowercase = decrypted.to_ascii_lowercase();
let mut frequencies = [0; 26];
let mut total_frequency = 0;