line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Webqq::Encryption::TEA; |
2
|
1
|
|
|
1
|
|
2
|
use strict; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
25
|
|
3
|
1
|
|
|
1
|
|
4
|
use Carp; |
|
1
|
|
|
|
|
0
|
|
|
1
|
|
|
|
|
35
|
|
4
|
1
|
|
|
1
|
|
3
|
use JE; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
313
|
|
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
sub strToBytes{ |
7
|
0
|
|
|
0
|
0
|
|
my $str = shift; |
8
|
|
|
|
|
|
|
#$str = join "",map {"\\x$_"} unpack "H2"x length($str),$str; |
9
|
0
|
|
|
|
|
|
my $return = ""; |
10
|
0
|
|
|
|
|
|
for(split //,$str){$return .= sprintf "%02x",ord($_)}; |
|
0
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
#my $je; |
12
|
|
|
|
|
|
|
#if(defined $Webqq::Encryption::TEA::_je ){ |
13
|
|
|
|
|
|
|
# $je = $Webqq::Encryption::TEA::_je ; |
14
|
|
|
|
|
|
|
#} |
15
|
|
|
|
|
|
|
#else{ |
16
|
|
|
|
|
|
|
# my $javascript; |
17
|
|
|
|
|
|
|
# if(defined $Webqq::Encryption::TEA::_javascript){ |
18
|
|
|
|
|
|
|
# $javascript = $Webqq::Encryption::TEA::_javascript; |
19
|
|
|
|
|
|
|
# } |
20
|
|
|
|
|
|
|
# else{ |
21
|
|
|
|
|
|
|
# local $/ = undef; |
22
|
|
|
|
|
|
|
# $javascript = ; |
23
|
|
|
|
|
|
|
# $Webqq::Encryption::TEA::_javascript = $javascript; |
24
|
|
|
|
|
|
|
# close DATA; |
25
|
|
|
|
|
|
|
# } |
26
|
|
|
|
|
|
|
# $je = JE->new; |
27
|
|
|
|
|
|
|
# $je->eval($javascript); |
28
|
|
|
|
|
|
|
# croak "Webqq::Encryption::TEA load javascript error: $@\n" if $@; |
29
|
|
|
|
|
|
|
# $Webqq::Encryption::TEA::_je = $je; |
30
|
|
|
|
|
|
|
#} |
31
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
#print qq# |
33
|
|
|
|
|
|
|
# var tea = TEA(); |
34
|
|
|
|
|
|
|
# var r = tea.strToBytes('$str'); |
35
|
|
|
|
|
|
|
# return(r); |
36
|
|
|
|
|
|
|
##; |
37
|
|
|
|
|
|
|
#$return = $je->eval(qq# |
38
|
|
|
|
|
|
|
# var tea = TEA(); |
39
|
|
|
|
|
|
|
# var r = tea.strToBytes('$str'); |
40
|
|
|
|
|
|
|
# return(r); |
41
|
|
|
|
|
|
|
##); |
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
#croak $@ if $@; |
44
|
0
|
|
|
|
|
|
return $return; |
45
|
|
|
|
|
|
|
} |
46
|
|
|
|
|
|
|
sub encrypt { |
47
|
0
|
|
|
0
|
0
|
|
my ($key,$data) = @_; |
48
|
0
|
|
|
|
|
|
$key = join "",map {"\\x$_"} unpack "H2"x length($key),$key; |
|
0
|
|
|
|
|
|
|
49
|
0
|
|
|
|
|
|
my $je; |
50
|
0
|
0
|
|
|
|
|
if(defined $Webqq::Encryption::TEA::_je ){ |
51
|
0
|
|
|
|
|
|
$je = $Webqq::Encryption::TEA::_je ; |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
else{ |
54
|
0
|
|
|
|
|
|
my $javascript; |
55
|
0
|
0
|
|
|
|
|
if(defined $Webqq::Encryption::TEA::_javascript){ |
56
|
0
|
|
|
|
|
|
$javascript = $Webqq::Encryption::TEA::_javascript; |
57
|
|
|
|
|
|
|
} |
58
|
|
|
|
|
|
|
else{ |
59
|
0
|
|
|
|
|
|
local $/ = undef; |
60
|
0
|
|
|
|
|
|
$javascript = ; |
61
|
0
|
|
|
|
|
|
$Webqq::Encryption::TEA::_javascript = $javascript; |
62
|
0
|
|
|
|
|
|
close DATA; |
63
|
|
|
|
|
|
|
} |
64
|
0
|
|
|
|
|
|
$je = JE->new; |
65
|
0
|
|
|
|
|
|
$je->eval($javascript); |
66
|
0
|
0
|
|
|
|
|
croak "Webqq::Encryption::TEA load javascript error: $@\n" if $@; |
67
|
0
|
|
|
|
|
|
$Webqq::Encryption::TEA::_je = $je; |
68
|
|
|
|
|
|
|
} |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
#print qq# |
71
|
|
|
|
|
|
|
# var tea = TEA(); |
72
|
|
|
|
|
|
|
# tea.initkey('$key'); |
73
|
|
|
|
|
|
|
# //var r = tea.enWithoutBase64('$data'); |
74
|
|
|
|
|
|
|
# var r = tea.enAsBase64("$data"); |
75
|
|
|
|
|
|
|
# tea.initkey(""); |
76
|
|
|
|
|
|
|
# return(r); |
77
|
|
|
|
|
|
|
##; |
78
|
0
|
|
|
|
|
|
my $has_mime_base64; |
79
|
0
|
|
|
|
|
|
eval{ |
80
|
0
|
|
|
|
|
|
require MIME::Base64; |
81
|
0
|
|
|
|
|
|
*Webqq::Encryption::TEA::encode_base64 = *MIME::Base64::encode_base64; |
82
|
|
|
|
|
|
|
}; |
83
|
0
|
0
|
|
|
|
|
$has_mime_base64 = 1 unless $@; |
84
|
0
|
0
|
|
|
|
|
my $js_code = $has_mime_base64?"var r = tea.enWithoutBase64('$data')":"var r = tea.enAsBase64('$data')"; |
85
|
0
|
|
|
|
|
|
my $p = $je->eval(qq# |
86
|
|
|
|
|
|
|
var tea = TEA(); |
87
|
|
|
|
|
|
|
tea.initkey('$key'); |
88
|
|
|
|
|
|
|
$js_code; |
89
|
|
|
|
|
|
|
tea.initkey(""); |
90
|
|
|
|
|
|
|
return(r); |
91
|
|
|
|
|
|
|
#); |
92
|
0
|
0
|
0
|
|
|
|
if($p and !$@){ |
93
|
0
|
0
|
|
|
|
|
return $has_mime_base64?encode_base64($p,""):$p; |
94
|
|
|
|
|
|
|
} |
95
|
|
|
|
|
|
|
else{ |
96
|
0
|
|
|
|
|
|
croak "Webqq::Encryption::TEA error: $@\n"; |
97
|
|
|
|
|
|
|
} |
98
|
|
|
|
|
|
|
} |
99
|
|
|
|
|
|
|
1; |
100
|
|
|
|
|
|
|
__DATA__ |