天翼飞young算法

简单看了看,写了个算号器,具体代码我github上也有,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
function encrypt($account,$password)
{
$account=strtoupper($account);
$key = 'aI0fC8RslXg6HXaKAUa6kpvcAXszvTcxYP8jmS9sBnVfIqTRdJS1eZNHmBjKN28j';
$time = time();
$time_hex = dechex($time);
//将时间转为4个字符
$time_byte_one = chr($time>>24);
$time_byte_two = chr($time>>16);
$time_byte_thr = chr($time>>8);
$time_byte_for = chr($time);
$password_ascii_sum = 0;
for ($i=0;$i<=strlen($account);$i++)
{
$password_ascii_sum+=ord(substr($account,$i,1));
}
$time_mod_pswlen = $time % strlen($password);
$time_mod = $time_mod_pswlen<1?1:0+$time_mod_pswlen;
$seed = $time_mod - ($time_mod_pswlen==strlen($password) ? 1 : 0);
$account_last_four = sprintf('%04x',$password_ascii_sum ^ $seed);
$split_len = $time_mod -($time_mod==strlen($password)? 1 : 0) + 1;
$split_password_one = substr($password,0,$split_len);
$split_password_two = substr($password,$split_len);
$split_key_one = substr($key,0,60-strlen($split_password_one));
$split_key_two = substr($key,0,64-strlen($account)-strlen($split_password_two));
$md5_str = $time_byte_one.$time_byte_two.$time_byte_thr.$time_byte_for.$split_key_one.$split_password_one.$account.$split_key_two.$split_password_two;
//MD5 原始二进制流 注意 “true” 参数
$md5_once = md5($md5_str,true);
$md5_twice = md5($md5_once);
$md5_final = substr($md5_twice,0,16);
$encrypt_account = '~ghca'.strtoupper($time_hex.'2023'.$md5_final.$account_last_four.$account);
$array = array(
'data'=>array(
'type'=>'ghca',
'id'=>$account,
'attribute'=>array(
'account'=>$account,
'password'=>$password,
'encrypt'=>$encrypt_account
)
)
);
print_r($array);
}
if ($argc != 3) {
echo "参数错误,使用方法:php GHCA.PHP 宽带用户名 宽带密码n";
exit;
}
encrypt($argv[1],$argv[2]);
?>


转载请注明出处!


本文链接:http://d1ves.io/2018/07/17/天翼飞YOUNG算法/