md5 collision
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70和d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70 |
这二个字符串的md5值会冲突,值为:79054025255fb1a26e4bc422aef54eb4。
求值程序perl版及ruby版本如下:
perl
#!/usr/bin/perl -wuse strict;my $v1=<<END_V1;d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 8955 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5bd8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1ec6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70END_V1my $v2=<<END_V2;d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 8955 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5bd8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1ec6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70END_V2my $p=join("",map {chr(hex($_))} split /\s+/, $v1);my $q=join("",map {chr(hex($_))} split /\s+/, $v2);# print $p, $q;print `echo -n \'$p\'|md5`; # linux md5sum, mac md5print `echo -n \'$q\'|md5`; # linux md5sum, mac md5 |
Ruby版
#!/usr/bin/ruby -wrequire 'digest/md5'v1=<<END_V1;d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 8955 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5bd8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1ec6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70END_V1v2=<<END_V2;d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 8955 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5bd8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1ec6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70END_V2nv1 = v1.split(/\s+/).collect{|char| char.hex.chr}.join("")nv2 = v2.split(/\s+/).collect{|char| char.hex.chr}.join("")puts Digest::MD5.hexdigest(nv1)puts Digest::MD5.hexdigest(nv2) |