感受FLASH CS3

Posted in Flash on August 31st, 2007 by Adam

这两天终于有时间感受了一下FLASH9 CS3,感觉FLASH确实有了质的飞跃,记得04年的时候选择做Java Applet,是由于FLASH无法实现音频振幅的实时提取,一些三维效果的效率过低等等。如今已经今非昔比,特别是Papervision 3D在三维实时效果上的运用几乎让人叹为观止。做了一个基于AS3的MP3播放器玩玩,FLASH实在太好玩。

这里有一些AS3常用到的东东:

HTML内嵌变量与SWF的传递

HTML代码: < param name="FlashVars" value="url=file.mp3">

AS3: var url:String=loaderInfo.parameters.url;

禁止SWF放大缩小:

[code lang="actionscript"]import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;

var swfStage:Stage = this.stage;
swfStage.scaleMode = StageScaleMode.NO_SCALE;
swfStage.align = StageAlign.TOP_LEFT;[/code]

自定义菜单:

[code lang="actionscript"]
var mycd:ContextMenu=new ContextMenu();
var item:ContextMenuItem=new ContextMenuItem("zhaiduo's Menu");
mycd.hideBuiltInItems();
mycd.customItems.push(item);
item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,openurl);
this.contextMenu=mycd;
[/code]

关于mysql_real_escape_string

Posted in PHP on August 23rd, 2007 by Adam

今天有空看了看多用户博客lyceumWordPress MU。在WP-db.php有这样一段代码:

[code lang="php"]function escape($string) {
return addslashes( $string ); // Disable rest for now, causing problems
if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' )
return mysql_escape_string( $string );
else
return mysql_real_escape_string( $string, $this->dbh );
} [/code]

很好的说明了addslashes和mysql_real_escape_string的区别,虽然国内很多PHP coder仍在依靠addslashes防止SQL注入(包括我在内),我还是建议大家加强中文防止SQL注入的检查。

addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

另外对于php手册中get_magic_quotes_gpc的举例:

[code lang="php"]if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}[/code]

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下。

广州直飞印度

Posted in 自助游 on August 21st, 2007 by Adam

前两个星期去南越王博物馆感受了一下印度佛像,今天看到广州直飞印度的票价,让我更加心动了。^_^。好好准备,等待明年出发。

广州至印度,新航最新特价

广州始发至

阿姆利则/加尔各答/班加罗尔/特里瓦得琅/新德里/科钦/孟买/马德拉斯
双程30天3250

使用条件

  1. 销售日期:06年10月4日-11月10日
  2. 旅行日期:06年10月4日-11月30日
  3. 回程只允许回广州
  4. 不设儿童优惠票价
  5. 全程需要确定旅行日期
  6. 因无当天航班接驳的行程,去成允许在新加坡停留,否则去程不允许在新加坡停留,回程无限制
  7. 不可退票
  8. 以上机票以电子客票方式出票
  9. 以上票价以人民币结算,不包含任何税项,具体以电话查询为准

广州新白云国际机场已经拥有了49条国际航线,从广州出发可到达国外50多个城市。直飞东南亚、中东、大洋洲和非洲的距离最短。热门目的地如普吉、迪拜、仰光、万象、加德满都等地,热门航线如:广州-迪拜-广州、广州-罗安达-广州、广州-仙台-广州、广州-札幌-广州、广州-加得满都-广州、广州-德里-广州、广州-吴哥窟(暹粒)-广州、广州-普吉-广州、广州-仰光-广州、广州-万象-广州。

一道微软面试题

Posted in PHP on August 16th, 2007 by Adam

CU上面有这样一道微软面试题:

圆圈上顺时针排列着1,2,3,….2000 这2000个数. 从1开始,顺时针隔一个拿走一个(1最先被拿走,下一个是3被拿走). 问最后剩下是哪一个数字.

据说这是约瑟夫问题(Josephus’ Problem),约瑟夫问题又是循环链表应用的典型例子。在苏格兰数学家Peter Guthrie Tait给出这个问题的通解后,又被称为Tait’s Problem。
这是解决办法:

(2000循环左移1)-1=1952 2000:
11111010000 2000循环左移1:
11110100001 2000循环左移1-1:
11110100000=1952

我用PHP试了一下,但是没有上面的简介,汗!

[code lang="php"]

$arr=array();
for($i=1;$i<=2000;$i++){
$arr[]=$i;
}
echo "

";
$tmp_arr=array();
$is_f=0;
$tmp_arr=$arr;
while(count($tmp_arr)>1){
for($i=0,$mx=count($arr);$i<$mx;$i++){
$item=$arr[$i];
if($item!=""){
if($is_f==1){
$is_f=0;
}else{
$arr[$i]="";
$is_f=1;
}
}
}
$tmp_arr=array_filter($arr, "myempty");
}
print_r($tmp_arr);

function myempty($var){
return ($var!= "");
}

[/code]

接触RSA算法

Posted in PHP on August 16th, 2007 by Adam

前两天刚看了RSA生成公匙和私匙的文章,没想到今天就有机会亲自去试试。

主要原理就是:利用RSA算法生成公钥和私钥两个字符串,分别保存在两个文件中,公钥是公开的,供其他人加密数据使用,而私钥是属于私人保管的用于解密数据

RSA – 非对称加密演算法主要功能包括:

创建密钥
按指定密钥长度初始化密钥(32位-2048位)
计算e,d,n值,生成密钥对(公钥和私钥)
n为两素数(q,p)之积: n=p*q
取任一数e,要求满足e<(p-1)*(q-1)并且e与(p-1)*(q-1)互素(就是最大公因数为1)
从而计算d*e%t==1
n d两个数就构成公钥;
n e两个数就构成私钥

获取保存公钥
获取保存私钥

用公钥加密数据
导入需要加密的数据
导入公钥
利用公钥中e和n。对于m计算密文的公式是m的e次方再与n求模。
获取数据的大整数
加密数据
保存加密后数据

用私钥对加密数据解密
读取加密数据
导入私钥
取得私钥的参数d,n
解密数据

RSA的缺点在于计算速度慢,另外如果大数n越容易被分解,就越容易被破解,推荐密钥长度最少1024位。

关于用PHP来实现RSA,我主要参考了PEAR上的Crypt_RSA模块,另外遇到的问题在于大整数十进制和十六进制的转换,php.net 也有不少解决方案。

[code lang="php"]
function mydec2hex($number){
$hexvalues = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
$hexval = '';
while($number != '0'){
$hexval = $hexvalues[bcmod($number,'16')].$hexval;
$number = bcdiv($number,'16',0);
}
return $hexval;
}
[/code]

总的来说,感觉对RSA有了初步的认识,希望能够做些更深入的学习。

补充:关于同余(congruence)的概念

n 是某个正整数,m1m2 是整数,如果 n 可以整除 m1m2 , 那么:m1m2, 在模 n 之下同余 (mi is congruent to m2 modulo n), 记为:tongyu.gif

RSS Feed