【bugku】 PHP_encrypt_1(ISCCCTF) writeup

PHP_encrypt_1(ISCCCTF)

给出了一个 encrypt 函数和一串密文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function  encrypt( $data , $key )
{
     $key  = md5( 'ISCC' );
     $x  = 0;
     $len  strlen ( $data );
     $klen  strlen ( $key );
     for  ( $i =0;  $i  $len $i ++) {
         if  ( $x  ==  $klen )
         {
             $x  = 0;
         }
         $char  .=  $key [ $x ];
         $x +=1;
     }
     for  ( $i =0;  $i  $len $i ++) {
         $str  .=  chr ((ord( $data [ $i ]) + ord( $char [ $i ])) % 128);
     }
     return  base64_encode ( $str );
} ?>
output: fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=
根据 encrypt 函数写对应的 decrypt
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
<?php
function  decrypt( $str ) {
     $mkey  "729623334f0aa2784a1599fd374c120d" ;
     $klen  strlen ( $mkey );
     $tmp  $str ;
     $tmp  base64_decode ( $tmp );   // 对 base64 后的字符串 decode
     $md_len  strlen ( $tmp );  //获取字符串长度
     for  ( $i =0;  $i  $md_len $i ++) {   //  取二次加密用 key;
         if  ( $x  ==  $klen )   // 数据长度是否超过 key 长度检测
             $x  = 0;
         $char  .=  $mkey [ $x ];   // 从 key 中取二次加密用 key
         $x +=1;
     }
     $md_data  array ();
     for ( $i =0; $i < $md_len ; $i ++) {  // 取偏移后密文数据
         array_push ( $md_data , ord( $tmp [ $i ]));
     }
     $md_data_source  array ();
     $data1  "" ;
     $data2  "" ;
     foreach  ( $md_data  as  $key  =>  $value ) {  // 对偏移后的密文数据进行还原
         $i  $key ;
         if ( $i  >=  strlen ( $mkey )) { $i  $i  strlen ( $mkey );}
         $dd  $value ;
         $od  = ord( $mkey [ $i ]);
         array_push ( $md_data_source , $dd );
         $data1  .=  chr (( $dd +128)- $od );   // 第一种可能, 余数+128-key 为回归数
         $data2  .=  chr ( $dd - $od );   // 第二种可能, 余数直接-key 为回归数
     }
     print  "data1 => " . $data1 . "<br>\n" ;
     print  "data2 => " . $data2 . "<br>\n" ;
}
$str  "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=" ;
decrypt( $str );
?>
FLAG -> Flag:{asdqw*fasfd*wfefq*dqwdadwq*daw*}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值