Last active
July 17, 2018 15:11
-
-
Save segfo/c905228ab5b17159fbc1c3b1ed862a1f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern crate crypto_hash; | |
extern crate ssdeep; | |
use crypto_hash::{Algorithm, hex_digest}; | |
extern crate levenshtein; | |
use levenshtein::levenshtein; | |
fn main() { | |
// ハッシュ化対象の文字列 | |
let hashes=&[b"give me hashsing!!",b"give you hashsing!",b"AAAAAAAAAAAAAAAAA!"]; | |
// 記録用のベクタ | |
let mut hashed_strings=Vec::new(); | |
let mut ssdeep_strings=Vec::new(); | |
// 配列hashesの中身についていろいろとハッシュ化してみる | |
for hashme in hashes.iter(){ | |
let hashme=*hashme; | |
[Algorithm::MD5,Algorithm::SHA1,Algorithm::SHA256].iter() | |
.map(|alg|(alg,hex_digest(alg.clone(), hashme))) | |
.for_each(|digest|{ | |
println!("{:?}:{}",digest.0,digest.1); | |
hashed_strings.push(digest.1); | |
}); | |
// ファジーハッシュを計算 | |
let fuzzy_hash = ssdeep::hash(hashme).unwrap_or("fuzzy hashing failed.".to_owned()); | |
println!("ssdeep:{}\n",fuzzy_hash); | |
ssdeep_strings.push(fuzzy_hash); | |
} | |
// 編集距離量をとってみる | |
for i in (0..3){ | |
let lhs=&hashed_strings[i+0]; // left hand side(左辺)の略 | |
let rhs=&hashed_strings[i+3]; // 上記より自明 | |
println!("crypt hash is = {} <==> {} ==distance==> {}",lhs,rhs,levenshtein(&lhs,&rhs)); | |
} | |
// ssdeepについても編集距離量を計算する | |
let lhs=&ssdeep_strings[0]; | |
let rhs=&ssdeep_strings[1]; | |
println!("ssdeep hash is = {} <==> {} ==distance==> {}",lhs,rhs,levenshtein(&lhs,&rhs)); | |
let rhs = &ssdeep_strings[2]; | |
// 差が出るであろう対象に対して左辺のみ変更して編集距離量を計算してみる | |
for i in (0..2){ | |
let lhs=&ssdeep_strings[i]; | |
println!("ssdeep hash is = {} <==> {} ==distance==> {}",lhs,rhs,levenshtein(lhs,rhs)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment