http://mail.qq.com/zh_CN/htmledition2/js/safeauth.js
代码:
/* Global.php 通用函数,调用RSA类提供加密解密功能。 云舒 , 2007年10月1日 */ function encrypt( $plain_text ) { $public_key = 'YTozOntpOjA7czozMjoiS1vW5NNLH39farB+HPE/U0A1fs1I7ja81GJxGrrjsYEiO2k6MTtzOjM6IgEAASI7aToyO3M6NjoicHVibGljIjt9'; $key = Crypt_RSA_Key::fromString($public_key); check_error($key); $rsa_obj = new Crypt_RSA; check_error($rsa_obj); $enc_text = $rsa_obj->encrypt($plain_text, $key); check_error($rsa_obj); return $enc_text; } function decrypt( $enc_text ) { $private_key = "YTozOntpOjA7czozMjoiS1vW5NNLH39farB+HPE/U0A1fs1I7ja81GJxGrrjsYEiO2k6MTtzOjMyOiIButTavL72eeXVEa8E5WkAJthoHqmHIyo3HblsSJG0aiI7aToyO3M6NzoicHJpdmF0ZSI7fQ=="; $key = Crypt_RSA_Key::fromString($private_key); check_error($key); $rsa_obj = new Crypt_RSA; check_error($rsa_obj); $rsa_obj->setParams(array('dec_key' => $key)); check_error($rsa_obj); $number = $rsa_obj->decrypt($enc_text); return $number; } |
代码:
/* 水印需求方,随机生成字符串,然后加密发送给水印生成方 云舒 , 2007年10月1日 */ require_once 'Global.php'; $chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; $str_a = $chars; $str_b = $chars; $str_c = $chars; $str_d = $chars; $str = $str_a.$str_b.$str_c.$str_d; $enc_data = encrypt( $str ); echo '<html><head><title>test</title></head><body><img src="CreateImg.php?number=' .rawurlencode( $enc_data ). '" /></body></html>'; |
代码:
/* 水印提供方,获取需求方传递过来的参数,解密,画出图形 云舒 , 2007年10月1日 */ require_once 'Global.php'; header('Content-type: image/gif'); if( isset( $_GET["number"] ) ) { $enc_number = rawurldecode( $_GET["number"] ); } else { exit; } $de_number = decrypt( $enc_number ); $chars = preg_split( '//', $de_number ); $im = imagecreate(75,30); $bg = imagecolorallocate($im, 255, 255, 255);//背景 $font_color = imagecolorallocate($im, 0, 0, 0);//字 imagestring($im, mt_rand(5,9), mt_rand(0,5), mt_rand(0,5), $chars[1], $font_color); imagestring($im, mt_rand(5,9), mt_rand(15,25), mt_rand(0,5), $chars[2], $font_color); imagestring($im, mt_rand(5,9), mt_rand(30,40), mt_rand(0,5), $chars[3], $font_color); imagestring($im, mt_rand(5,9), mt_rand(45,50), mt_rand(0,5), $chars[4], $font_color); // 随机点 for ($i=1; $i<=10; $i++) { imagestring($im,mt_rand(0,5),mt_rand(-5,63),mt_rand(-5,23),".",imageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255))); } imagegif($im); imagedestroy ($im); |
三. 防御伪造域的垃圾邮件
垃圾邮件现在也是网络上很头疼的一个问题,使用非对称算法的签名功能,可以对伪造域的垃圾邮件进行鉴别,需要邮件接收方服务器的支持。理论不多说 了,直接举例。假设我是mail.icylife.net域,我给mail.ph4nt0m.org发邮件。但是有人自己架设了mail服务器,伪装成 webmaster@icylife.net给 webmaster@ph4nt0m.org发邮件,试图取得他的信任,这种问题如何处理?好办,使用非对称加密的签名验证功能。
首先,我在 http://mail.icylife.net/publickey.txt存放我的公钥文件,私钥自己保存好。然后对邮件服务器进行一些改进,对于本域发出去的所有邮件,包括邮件正文和接受者一起做一个签名,把签名附在邮件中一起发出去。而mail.ph4nt0m.org域中的邮件服务器在接收邮件时,从 http://mail.icylife.net/publickey.txt取得我的公钥,对签名进行验证,如果签名不对,马上提示用户遭受源域名伪造攻击。对于攻击者来说,他没有我的私钥,是不可能伪造出同样的签名的。
以上几个想法,一直一来有个朦胧的感觉,但是一直抓不住,前几天洗澡的时候,突然明朗起来了。或者有人说,RSA这些非对称加密是可以破解的,我只能说,地球都会毁灭,何况是加密算法。