Showing posts with label Hash. Show all posts
Showing posts with label Hash. Show all posts

Friday, January 09, 2009

页面重定向与url中的hash在不同的浏览器中的表现

访问时url上带有hash(如http://localhost/a.php#test),重定向到b.php页面时,当前a.php页上hash会被带到b.php页面上,在Firefox/Opera上测试的效果是如此,但IE6上则直接到b.php页,不会将a.php页上hash值带过来。
示例代码:
a.php
<php
header("Location: b.php");
?>
b.php
<php
?>
访问http://localhost/a.php#test,跳转完成后url为http://localhost/b.php#test

Sunday, October 12, 2008

MD5 值相同的二个字符串

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89 
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89 
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70
这二个字符串的MD5值会冲突,值为:79054025255fb1a26e4bc422aef54eb4. 求值程序perl版及ruby版本如下:
#!/usr/bin/perl -w

use strict;

my $v1=<<END_V1;
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70
END_V1

my $v2=<<END_V2;
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70
END_V2

my $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 md5
print `echo -n \'$q\'|md5`; # linux md5sum, mac md5

Ruby版:
#!/usr/bin/ruby -w
require 'digest/md5'

v1=<<END_V1;
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70
END_V1

v2=<<END_V2;
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70
END_V2

nv1 = 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)


Reference: http://www.mathstat.dal.ca/~selinger/md5collision/

Sunday, September 23, 2007

Perl中对@array和%hash的排序


#! /usr/bin/perl -w
use strict;

# 如果在最终结果中$a 出现在$b 之前,则其排序子程序返回-1。如果$b 出现在$a 之前,则返回 1。
# 如果$a 和$b 的顺序无关紧要,则子程序返回 0。为什么它无关紧要呢?也许你正在做一个大小写无关的排序,而这两个字
# 符串是 fred 和 Fred 。也许你正在做一个数字排序,而这两个元素相等。
sub by_number {
if ($a > $b) {-1} elsif ($a < $b) {1} else {0}
}

my @nums = (1, 6, 2, 7, 3, 8, 4, 9, 5);
@nums = sort by_number @nums;
print "@nums\n";

# 针对本例,我们使用太空船(spaceship)符号(<=>)。这个操作符比较两个数字,按照数字将其排序,并返回-1, 0, 1。
sub by_numerically { $a <=> $b };
@nums = sort by_numerically @nums;
print "@nums\n";

sub case_insenstive { "\L$a" cmp "\L$b"};
print sort case_insenstive ('Last ', 'First ', 'second ', 'third ');
print "\n\n";

my %score = (
"barney" => 195,
"fred" => 205,
"dino" => 30,
"bam-bamm" => 195,
);

sub by_score_and_name {
$score{$a} <=> $score{$b}
or
$a cmp $b;
}
# or的优先级低,在前面太空船'<=>'比较结果后,如果返回的为0,则计算后面的比较。
my @winners = sort by_score_and_name keys %score;
print "@winners\n";

Array的排序方法sort与Javascript, Ruby基本一致。Javascript sort调用方法举例如下:

function by_number(a, b) {
if (a > b) {
return 1;
} else if (a < b) {
return -1;
} else {
return 0;
}
}

function by_number_reverse(a, b) {
if (a > b) {
return -1;
} else if (a < b) {
return 1;
} else {
return 0;
}
}
var myArray = [2, 4, 2, 17, 50, 8];
alert( myArray.sort() );
alert( myArray.sort(by_number));
alert( myArray.sort(by_number_reverse));

Sunday, August 05, 2007

prototype javascript library Hash example


<script type="text/javascript" charset="utf-8">
function doc(argument) {
document.write(argument);
document.write("<br />\n");
}

var pair = ['a', 'aaa'];
pair.key = 'a', pair.value = 'aaa';
doc('pair.inspect() = ' + pair.inspect());
doc('pair.key = ' + pair.key);
doc('pair.value = ' + pair.value);

doc('=====================================================')

var o = {
x: 'xxx',
y: 'yyy',
z: 'zzz'
};
var h1 = Hash(o); // this.constructor => Window
var h2 = new Hash(o); // this.constructor => function (obj) { Object.extend(this, obj || {}); }
doc('h2.constructor = ' + h2.constructor);
doc('h2.constructor == Hash => ' + (h2.constructor == Hash)); // true
doc('h2.inspect() = ' + h2.inspect().escapeHTML());
doc('h2.keys() = ' + h2.keys().inspect());
doc('h2.values() = ' + h2.values().inspect());

var o2 = {
a: 'aaa',
b: 'bbb',
c: 'ccc',
x: 'xyz'
};
h2.merge(o2);
doc('h2.inspect() = ' + h2.inspect().escapeHTML());
doc('h2.size() = ' + h2.size());
doc('h2.x = ' + h2.x);
doc('h2.toQueryString() = ' + h2.toQueryString());
var rm = h2.remove('a', 'b');
doc('h2.remove() = ' + rm.inspect());
doc('h2.inspect() = ' + h2.inspect().escapeHTML());

</script>