2005年10月23日

2005年06月05日

 

此主题相关图片如下:
按此在新窗口浏览图片警察冲上看台

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷01

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷02

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷03

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷04


此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷05

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷06

此主题相关图片如下:
按此在新窗口浏览图片警察不允许记者采访并打记者

此主题相关图片如下:
按此在新窗口浏览图片冲突中受伤的记者

此主题相关图片如下:
按此在新窗口浏览图片被殴打的球迷01

此主题相关图片如下:
按此在新窗口浏览图片被殴打的球迷02

此主题相关图片如下:
按此在新窗口浏览图片被殴打的球迷03

此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法01

此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法02

此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法03


此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法

此主题相关图片如下:
按此在新窗口浏览图片新乡公安局政委出面向群众解释道歉(他指示警察冲上看台殴打球迷)01

此主题相关图片如下:
按此在新窗口浏览图片新乡公安局政委出面向群众解释道歉(他指示警察冲上看台殴打球迷)02

此主题相关图片如下:
按此在新窗口浏览图片新乡公安局政委出面向群众解释道歉(他指示警察冲上看台殴打球迷)03

此主题相关图片如下:
按此在新窗口浏览图片冲突过后的看台01

此主题相关图片如下:
按此在新窗口浏览图片冲突过后的看台02

2004年11月26日

















































































[1] Blowfish模块
作者:hoowa


总在这里问东西也不能不给这里的朋友点东西
这是我刚刚做的,给你资料你整理一下就可以用了:)

Blowfish是一个强壮的可变长度由8个字节到56个字节(448位钥匙)的加密技术。
只有在双方持有相同的钥匙情况下才有可能解密数据。
他照比DES算发具有更高的安全性(目前无法破解)。
而且他的加密速度是最快的!
这里不讲他如何做的算法。我们只讲Crypt::Blowfish如何使用。

安装:
win32系统:
输入ppm命令,然后输入install Crypt::Blowfish回车等待安装结束,或search blowfish查看列表。

Linux下请到www.cpan.org下载模块,编译安装需要gcc

此模块是使用的最小8字节长度,最大56字节长度,在编写钥匙的时候如果不符合这个范围那么就将出现错误。
在加密的时候,需要将所加密的字符穿分割成为多个8字节长度的字符串,如果不够8字节可以填充空格等特殊字符。

以下是举例:







代码:

#!/usr/bin/perl
use Crypt::blowfish; #加载模块


#需要加密的资料
$data = qq~欢迎光临www.ilcatperl.org这里是Perl的天堂
欢迎喜欢Perl
如果你觉得Perl不行,那就是你水平太臭,回家看孩子玩吧~;

#构造对象
my $fish = new Crypt::Blowfish ‘this is my key’; # 8 bytes < Key > 56 bytes

#编码
@data = &block($data); #将数据以8个字节块化,如果最后不够补充空格

foreach (@data) {
   $encode .= $fish->encrypt($_);
}

#解码
@data = &block($encode); #将数据以8个字节块化,如果最后不够补充空格

foreach (@data) {
   $decode .= $fish->decrypt($_);
}


#块化子程序
sub block
{
   my ($string) = @_;
   my (@blocks,$last_length,$nu,$ad);
   my @blocks = unpack(“a8 “x(int(length($data)/) . “a*”, $string);

   $last_length = length($blocks[$#blocks]);

   if (($nu = 8 – $last_length) > 0) {
      for (my $i=1;$i<=$nu ;$i++) {
         $ad .= ‘ ‘;
      }
   }
   $blocks[$#blocks]= $blocks[$#blocks].$ad;
   
   return(@blocks);
}

#以上代码encode是编码后decode是解码后
#coding by hoowa



_________________
欢迎访问:http://www.bang5.com/
谢谢!
呵呵:)


最后进行编辑的是 deathcult on 2003-06-10 16:06, 总计第 1 次编辑
返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
此人为版主 deathcult   性别:帅哥  
版主 – 大天使


大天使
注册时间: 2002-07-22
最后登录: 2004-11-10
帖子总数:
2089
精华帖子: 18
原创精华: 6
来自: www.bang5.com
BLOG主页:
进入
在线状态: …保密…









帖子总数发表于: 2003-06-10 16:06    发表主题: 举报此帖 引用并回复




[2] 父进程与子进程communicate..利用PIPE的例子
作者:apile


# 本程序主要利用PIPE来建立Parent Process与Child Process间的互相连通,
# 利用%STATUS纪录目前Child Process的所有状态,与%CHILDREN纪录所有的Child
# Process。
# Parent Process:负责由CHILD_READ中读取所有CHILD Process的输入,并纪录
# 这些Process目前的状态。当收到INT、HUP、TERM等Signal时,即跳出主要loop
# 并将所有child Process全部杀光…







代码:

#!/usr/bin/perl
use strict;
use IO::Select;
use POSIX qw(WNOHANG);

#—Define constants:定义准备先fork几个Process
use constant PREFORK_CHILDREN   => 3;
# debugging information:显示过程
use constant DEBUG              => 1;

# declare globals
my $DONE=0;             # set flag to true when server done
my %STATUS = ();        #child status information, child pid form keys of the ha
sh, status form the values
#— 纪录所有Child Process的id…
my %CHILDREN = ();
#—Interrupt handles,跳出loop
$SIG{TERM} = $SIG{INT}=$SIG{HUP} = sub { $DONE++ };
#— get CHLD Signal
$SIG{CHLD} = sub {
         while((my $child=waitpid(-1,WNOHANG)) > 0){
           delete $CHILDREN{$child};
         }
      };
# create a pipe for IPC:建立PIPE
pipe(CHILD_READ,CHILD_WRITE) or die “Can’t make pipe!\n”;
my $IN = IO::Select->new(\*CHILD_READ);
# prefork some children
make_new_child() for (1..PREFORK_CHILDREN);

# main loop
while(!$DONE){
  # avoid parent block in the I/O call
  if ($IN->can_read){ # got a message from one of the children
    my $message;
    next unless sysread(CHILD_READ,$message,4096);
  # may contain several messages
    my @messages = split “\n”,$message;
  # retrive every pid and status code
    foreach (@messages){
      next unless my ($pid,$status) = /^(\d+) (.+)$/;
  # change status
      if($status ne “done”){
         $STATUS{$pid} = $status;
      }else{
  # delete pid
         delete $STATUS{$pid};
      }
    }
  }

  warn join(‘ ‘,map {“$_=>$STATUS{$_}”} keys %STATUS),”\n” if DEBUG;
  last unless %CHILDREN
}
warn “Termination received, killing children\n” if DEBUG;
#————-杀掉所有Child Process
kill TERM => keys %CHILDREN;
sleep while %CHILDREN;

warn “Normal termination.\n”;
exit 0;
#—- 建立新的Process
sub make_new_child{
  die “can’t fork :$!” unless(defined( my $child = fork()));
  if($child){   # child > 0, so we’re the parent
    $CHILDREN{$child} = 1;
    warn “launching child $child\n” if DEBUG;
  }else{
    close CHILD_READ;   # no need to read from pipe
    do_child();         # child handles incoming connections
    exit 0;             # child is done
  }
}
#—— child process
sub do_child{
   # write status code: idle
   syswrite CHILD_WRITE,”$$ idle\n”;
   for(1..1000000){ };
   syswrite CHILD_WRITE,”$$ busy\n”;
   for(1..1000000){ };
   syswrite CHILD_WRITE,”$$ done\n”;
}




_________________
欢迎访问:http://www.bang5.com/
谢谢!
呵呵:)
返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
此人为版主 deathcult   性别:帅哥  
版主 – 大天使


大天使
注册时间: 2002-07-22
最后登录: 2004-11-10
帖子总数:
2089
精华帖子: 18
原创精华: 6
来自: www.bang5.com
BLOG主页:
进入
在线状态: …保密…









帖子总数发表于: 2003-06-11 11:06    发表主题: 举报此帖 引用并回复




[3] 父进程与子进程communicate..利用IPC::Shareable的例子
作者:apile

Hi…這是昨天那個例子改用share memory的方式,兩相比較..我覺得
PIPE比較好點…尤其是有大量資料需要互傳的時候…
———————————————————————————
本程序主要使用IPC::Shareable module来建立一块共同的share memory
以为所有程序所用,主要利用tie将%STATUS、%status与IPC::Shareable
tie在一起,其中SHM_GLUE用来向OS做注册一块memory的識別符號,因
此若程序失败, 未能正常清除share memory,必须利用OS提供的share
memory工具清除, 否则程序将无法启动。linux可以使用ipcrm清除
Parent Process利用sleep(),不做任何动作,而child Process的状态,
透过kill -ALARM getppid() 通知Parent,child Process的status已经
改变了..
———————————————————————–






代码:

#!/usr/bin/perl -w
# p_shm.pl

#—- 加载 module包含IPC::Shareable
use strict;
use POSIX qw(WNOHANG);
use IPC::Shareable;

#—- 定义常数
use constant PREFORK_CHILDREN => 3;
#— 定义识别文字
use constant SHM_GLUE => ‘PERF’;
#— 查测过程
use constant DEBUG => 1;

#— 宣告全域变量
my $DONE = 0; # set flag to true when server done
#— 纪录CHILD的STATUS
my %STATUS = ();
my %CHILDREN=();

#— 抓取Signal INT,TERM,ALRM—-
$SIG{INT} = $SIG{TERM}= sub{ $DONE++ };
$SIG{ALRM} = sub {}; # receive alarm clock signals, but do nothing
#—-抓取 signal : CHLD
$SIG{CHLD} = sub {
while((my $child=waitpid(-1,WNOHANG)) > 0){
delete $CHILDREN{$child};
}
};

# create a shared memory segment for child status
tie(%STATUS,’IPC::Shareable’,SHM_GLUE,
{ create =>1,exclusive=>1,destroy=>1,mode=>0600})
or die “Can’t tie \%STATUS to shared memory: $!”;

# prefork some children
make_new_child() for(1..PREFORK_CHILDREN); # prefork children

#– Main loop
while(!$DONE){
sleep; # sleep until a signal arrives(alarm clock or child)
# get the list of idle children
warn join(‘ ‘,map{“$_=>$STATUS{$_}”} keys %STATUS),”\n” if DEBUG;
unless(%CHILDREN){ last; }
}

warn “Termination received, killing children\n” if DEBUG;
#————-杀掉所有Child Process
kill TERM => keys %CHILDREN;
sleep while %CHILDREN;
warn “Normal termination.\n”;
exit 0;

#—- 给launch_child cleanup child code
sub make_new_child{
die “can’t fork :$!” unless(defined( my $child = fork()));
if($child){ # child>0, so we’re the parent
warn “launching child $child\n” if DEBUG;
$CHILDREN{$child} = 1;
}else{
do_child(); # child handles incoming connections
exit 0; # child is done
}
}
#— 执行accept() loop fro each child —
sub do_child{
my %status;
#–将%status与IPC::Shareable tie在一起
tie(%status,’IPC::Shareable’, SHM_GLUE)
or die “Child $$: can’t tiel \%status to shared memory: $!”;
#—-告知Parent Process,child process 状态已经改变
$status{$$} =’idle’; kill ALRM=>getppid();
for(1..1000000){ }
#—-告知Parent Process,child process 状态已经改变
$status{$$} =’busy’; kill ALRM=>getppid();
#—-告知Parent Process,child process 状态已经改变
for(1..1000000){ }
$status{$$} = ‘done’; kill ALRM=>getppid();
warn “child $$: done\n” if DEBUG;
}
#—- delete the child’s PID from %STATUS.
sub cleanup_child{
my $child=shift;
delete $STATUS{$child};
}     



_________________
欢迎访问:http://www.bang5.com/
谢谢!
呵呵:)
返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
此人为版主 deathcult   性别:帅哥  
版主 – 大天使


大天使
注册时间: 2002-07-22
最后登录: 2004-11-10
帖子总数:
2089
精华帖子: 18
原创精华: 6
来自: www.bang5.com
BLOG主页:
进入
在线状态: …保密…









帖子总数发表于: 2003-06-26 19:06    发表主题: 举报此帖 引用并回复




[4]
為什麼要用IO::Poll?因為使用IO::Select時候,因為其儲存handle是存在。。。。。。
作者:apile

以下資料為本人閱讀Nework Programming With Perl的記要..
有興趣的自己研究研究…

=============================================
date: 2003/06/22

IO::Poll的使用說明:
在5.6版本的時候開始發展,功能完整的版本為0.04版。所以要注意的是IO::Poll版本一定要是0.04以上。

為什麼要用IO::Poll?因為使用IO::Select時候,因為其儲存handle是存在bit vector裡面,因此必須針對所有監控中的Handle一個一個去Scan,找出可以Read/Write的handle。因此在效能的Issue上,當遇到大量的handle需要監控時,就會產生效能上的降低。而IO::Poll的機制則不是這麼回事,他同樣可以監控大量的HANDLE,但是利用array儲存這些handle,因為array的儲存機制,並不同於bit vector,並不需要一個一個去Scan這些handle,所以在效能上比較好。

IO::Poll只需要一個Object就可以處理所有的handle,透過bitmask將Event傳給被監控的Handle,一旦符合需求,可以從handle中取出。

IO::Poll接受的Event(mask):
可讀的
POLLIN:一般與有Priority的資料
POLLRDNORM:一般的資料
POLLRDBAND:有Priority的資料
POLLPRI:特別高的Priority
可寫的
POLLOUT:一般與有Priority的資料
POLLWRNORM:一般的資料
POLLWRBAND:有Priority的資料
有錯誤的
POLLHUP:HangUp發生
POLLNVAL:handle不合法
POLLERR:有Error發生,如果是Socket可用sockopt(SO_ERROR)取得Error內容

IO::Poll的method
1.$poll=IO::Poll->new():產生IP::Poll的Object
2.$mask=$poll->mask($handle,[$mask])
取得或設定目前handle的 event bitsmask,如果mask沒給,則目前的設定值回傳。如果有給mask則將該mask設定給該handle。如果mask為0,則從list將該handle移除。所有的handle預設都會監控(POLLNVAL、POLLERR、POLLHUP)。
3.$poll->remove($handle)
同$poll->mask($handle,0);
4.$events=$poll->poll([$timeout])
等候有任何一個監控中的handle可以被讀取或寫入。回傳Event Type。
5.@handles=$poll->handles([$mask])
取出符合mask的handles。
6.$mask = $poll->events($handle)
取得$handles的所有mask。







代码:

#!/usr/bin/perl
# file : test.pl
# usage: test.pl [host] [port]
# 利用IO::Poll達到多工的技術
#–加載module
use strict;
use IO::Socket;
#–引用後面的constant
use IO::Poll qw( POLLIN POLLOUT POLLERR POLLHUP);
use Errno qw(EWOULDBLOCK);
#–設定Buffer的最大值
use constant MAXBUF =>8192;
#–忽略掉HANG HUP的Signal
$SIG{PIPE} = ‘IGNORE’;
#–設定全域變數,兩個buffer兩個flag
my ( $to_stdout,$to_socket,$stdin_done,$sock_done);
#–取得 host and port
my $host = shift or die “Usage: test.pl host [port]\n”;
my $port = shift || ‘echo’;
#–建立Socket
my $socket = IO::Socket::INET->new(“$host:$port”) or die $@;
my $poll = IO::Poll->new() or die “Can’t create IO::Poll object”;
#–一開始先將STDIN與$socket放入list中,並將其mask設定為POLLIN準備讀取。
$poll->mask(\*STDIN => POLLIN);
$poll->mask($socket => POLLIN);
#–設定標準輸出與$socket為noblocking mode
$socket->blocking(0); # turn off blockingon the socket
STDOUT->blocking(0);  # and on STDOUT
#–main loop,$poll->handles會回傳所有正在監控中的handle
while($poll->handles){
#–等候直到有事件符合
  $poll->poll;
  # 處理可讀取的事件
  for my $handle ($poll->handles(POLLIN|POLLHUP|POLLERR)){
    if($handle eq \*STDIN){
  #?#93;資料讀取表示STDIN已經終止,否則將資料放入to_socket buffer中
    $stdin_done++ unless sysread(STDIN,$to_socket,2048,length $to_socket);
    }
    elsif($handle eq $socket){
  # ?#93;資料讀取表示Socket已經讀取完畢,否則將資料附入to_stdout buffer中
   $sock_done++ unless sysread($socket,$to_stdout,2048,length $to_stdout);
    }
  }

  # 處理可寫入的事件
  for my $handle ($poll->handles(POLLOUT|POLLERR)){
     if($handle eq \*STDOUT){
       my $bytes = syswrite(STDOUT,$to_stdout);
     # 假若不是EWOULDBLOCK,表示真的有Error發生,所以才無法寫入
       unless ($bytes){
          next if $! == EWOULDBLOCK;
          die “write to stdout failed: $!”;
       }
     # 如果發生Partial Write將已經寫出的先清掉。
       substr($to_stdout,0,$bytes) = ”;
     }
     elsif($handle eq $socket){
       my $bytes = syswrite($socket,$to_socket);
       unless ($bytes){
          next if $! == EWOULDBLOCK;
          die “write to socket failed: $!”;
       }
       substr($to_socket,0,$bytes) = ”;
     }
  }
} continue {
  # 每次While loop執行時都會執行到這兒
  # 先設定三個bitmask為0,表示將從list中將該handle移除
  my ($outmask,$inmask,$sockmask) = (0,0,0);
  # 設定stdout的mask,假如有資料要寫出去,則將其mask設為可寫(POLLOUT)
  $outmask = POLLOUT if length $to_stdout > 0;
  # 當 to_socket的資料長度比MAXBUF大、或socket已經完結
  # 或stdin已經完結,都不成立時,則設定STDIN可讀取。
  $inmask = POLLIN unless length $to_socket >= MAXBUF
                      or ($sock_done || $stdin_done);
  # 假如有資料要寫出去,設定$socket為POLLOUT(待寫)
  $sockmask = POLLOUT if length $to_socket>0;
  # 同STDIN定義,但是|=表示附加上去,因為Socket可以同時讀寫
  $sockmask |= POLLIN unless length $to_stdout>=MAXBUF or $sock_done;
  # 設定STDIN、STDOUT、Socket三個handle的bitmask
  $poll->mask(\*STDIN => $inmask);
  $poll->mask(\*STDOUT=> $outmask);
  $poll->mask($socket => $sockmask);
  # 如果$stdin_done為真且已經?#93;有資料送出至$socket了,則將$socket 關?#93;
  $socket->shutdown(1) if $stdin_done and !length($to_socket);
}



_________________
欢迎访问:http://www.bang5.com/
谢谢!
呵呵:)
返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
雨中漫步     
圣骑士


注册时间: 2003-08-29
最后登录: 2004-11-12
帖子总数:
102
精华帖子: 0
原创精华: 0
来自: http://www.perl.cn
BLOG主页:
进入
在线状态: …离线









帖子总数发表于: 2003-09-02 18:09    发表主题: 举报此帖 引用并回复



截取中英文混合字符串,写得很罗嗦,请高人修改一下!
作者:雨中漫步






代码:

sub makelen($$)
  {
     my($sstr,$slen)=@_;
     my $makelen,$parity;
     $mslen=length($sstr);
     if($mslen>$slen)
       {
           for($mn=0;$mn<$slen;$mn++) #在要求的长度内
             {
                $ss=substr($sstr,$mn,1);
                if(ord($ss)<127) #为英文
                  {
                      $parity+=1;
                  }
             }
            if($parity%2==1) #含英文长度为奇数
             {
                if($slen%2==1) #如果所要求的长度也为奇数
                           {
                              $tmpstr=substr($sstr,0,$slen);
                       }
                     else #所要求的长度为偶数
                       {
                          $tmpstr=substr($sstr,0,$slen-1);
                       }
             }
           else #含英文长度为偶数或者为0,0也为偶数
             {
                if($slen%2==1) #如果所要求的长度为奇数
                           {
                              $tmpstr=substr($sstr,0,$slen-1);
                       }
                     else #所要求的长度为偶数
                       {
                          $tmpstr=substr($sstr,0,$slen);
                       }
             }
           $makelen=$tmpstr;
       }
     else
       {
           $makelen=$sstr;
       }
     return $makelen;
  }



_________________
http://www.perl.cn/ #欢迎共同打造perl中国站
http://www.chinabcb.com/ //china c++
返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
slimzhao     
侠客


侠客
注册时间: 2003-09-04
最后登录: 2004-10-25
帖子总数:
23
精华帖子: 0
原创精华: 0


在线状态: …离线









帖子总数发表于: 2003-09-04 13:09    发表主题: 举报此帖 引用并回复



To: 雨中漫步

可以拿下面的代码测试一下:






代码:
$str = “asdf中12 34国人民”;
for(0..length($str) )
{
  print “$_=>”, substring($str, $_), “\$\n”;
}

长度为8, 9时不正确.

看一下这代码怎么样:






代码:
sub substring($$)
{
  my ($str, $len) = @_;
  my $retval = substr($str, 0, $len);
  $retval =~ /[\x7f-\xff]+$/s;
  chop($retval) if (length($&) % 2 == 1);
  return $retval;
}   


返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
lgjut     
圣骑士


注册时间: 2002-12-03
最后登录: 2004-11-18
帖子总数:
140
精华帖子: 0
原创精华: 0


在线状态: …离线









帖子总数发表于: 2003-09-23 22:09    发表主题: 举报此帖 引用并回复



use encoding ‘euc-cn’, STDIN => ‘euc-cn’, STDOUT => ‘euc-cn’;

$str = “asdf中12 34国人民”;
for(0..length($str) )
{
print “$_=>”, substr($str, $_), “\$\n”;
}


返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
雨中漫步     
圣骑士


注册时间: 2003-08-29
最后登录: 2004-11-12
帖子总数:
102
精华帖子: 0
原创精华: 0
来自: http://www.perl.cn
BLOG主页:
进入
在线状态: …离线









帖子总数发表于: 2003-10-26 22:10    发表主题: 举报此帖 引用并回复



获得本机的多个IP地址
本人是初学者,找了半天才找到这种获得多个IP的方法,原来就这么简单 icon_biggrin.gif ,希望能对初学者有所帮助!






代码:

#!c:/perl/bin/perl.exe
use strict;
use Socket;
use Sys::Hostname;

my $host = hostname();
print $host.”\n”;

my $name;
my $aliases;
my $type;
my $len;
my @thisaddr;
($name,$aliases,$type,$len,@thisaddr)=gethostbyname($host);

foreach(@thisaddr)
{
   print inet_ntoa($_).”\n”;
}



_________________
http://www.perl.cn/ #欢迎共同打造perl中国站
http://www.chinabcb.com/ //china c++
返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
y6cmE   性别:帅哥  
新手上路

4
精华帖子: 0
原创精华: 0
来自: xm.fj.cn

在线状态: …离线









帖子总数发表于: 2003-10-27 16:10    发表主题: 举报此帖 引用并回复









代码:

#!e:/635/bin/perl.exe -w
use strict;
#####  Name:      xnnyy.pl
#####  Version:   0.0.0.1
#####  Author:    y6cmE[PerlChina]
#####  Contact:   www.perlchina.org
#####  Updated:   2003-9-21
$|=1;
open(F,”>xnnyy.txt”) or die “Can’t write output file!”;
my $x=shift||3;
my $y=int($x/2);
my @z=(()x$x);
my($e,$v,$n,$m);
for(1..$x*$x){
   if($_ > $x){
      $n=(–$n+$x)%$x;
      $m=(1+$m++)%$x;
      if($z[$n][$m]){
         $n=($n+2)%$x;
         $m=($m-1)%$x;
         $z[$n][$m]=$_;
         print F “$_\t$n\t$m\n”;
      }
      else{
         $n=$n;
         $m=$m;
         $z[$n][$m]=$_;
         print F “$_\t$n\t$m\n”;
      }
   }
   else{
      $n=($x+$e–)%$x;
      $m=(++$v+$y-1)%$x;
      $z[$n][$m]=$_;
      print F “$_\t$n\t$m\n”;
   }
}
close F;
print “Enjoy”;



_________________
The women who are somewhat beautiful, somewhat nice and have some lordliness and thank God are clever are ALWAYS MAINTAIN MANY CANDIDATES!!
返回页首




中国BBS社区100强评比,支持CU,请再投CU一票,谢谢!
ZEWI     
新手上路


注册时间: 2004-08-21
最后登录: 2004-08-23
帖子总数:
4
精华帖子: 0
原创精华: 0


在线状态: …离线









帖子总数发表于: 2004-08-21 17:08    发表主题: 举报此帖 引用并回复



字节码生成器——浅谈PERL源码加密方法
发表于 2004-8-21 16:45:41
文:北京\悟空ZEWI!! (MSN:zengtaocool@msn.com)

众所周知,PERL是一种开源类语言,所以其用做商业软件或者共享软件的前景受到了一定的限制。很多人很羡慕PHP,因为它有ZEND的保护。其实PERL本身的PERLCC,就提供了类似ZEND的功能(运行时需要B::Bytecode模块支持),当然除此之外,它还能作为压缩源码、检查语法等用途。值得注意的是,它是在Perl5.6以后版本中出现的。

我们在WINXP+Apache+PERL5.8的环境下进行操作。假如我们要把一个名为1.pl的文件转换成字节码的perl程序。进入命令行,键入:perlcc -B 1.pl

随后,在工作目录内就生成了一个名为a.exe的文件,操作成功!当然,在运行之前必须要把exe改成原扩展名,否则无法运行,起码在CGI环境下是这样的。

下面来进阶一下,其实还有其他的一些属性可以用。在PERLCC下都是通用的,不光是在字节码生成器中。注意在这里参数的大小写都是非常铭感的,必须严格按照参数大小写格式操作。

-Iinclude directories
操作指定目录内所有文件

-o output file name
指定生成文件名称
-r
生成文件后,立刻运行程序
更多的属性可以参照:http://www.perldoc.com/perl5.8.0/bin/perlcc.html

另外,如果是CGI文件的话,其中的HTML是无法被转换成字节码的,还需要其他软件来辅助进行加密。但是这基本上无关紧要吧?