加密数据
<?php
/*
*本代码进行数据加密
*由于脚本需要发送两个cookie,所以大部分php代码位于全部html之前
*/
/*
*对于密匙来书,md5()函数利用一些随机单词和数字创建出32字符串的字符串
*/
$key = md5('77 public drop-shadow java');
/*
*被加密的数据
*/
$data = 'rosebud';
/*
*本例使用Rijndael算法,它也被称为"高级加密标准(AES)"
*模式主要有四种:ECB(电子码表),CBC(密码块连接),CFB(密码反馈),OFB(输出反馈)
*/
$m = mcrypt_module_open('rijndael-256','','cbc','');
/*
*创建初始矢量
*本例在使用CBC时使用初始矢量来提高安全性
*php手册建议创建这样的矢量
*/
/*
*mcrypt_enc_get_iv_size()函数能够为要使用的密码生成一个适当的初始矢量
*需要声明的是,在window上应该使用MYCYPT_RAND而不是MCRYPT_DEV_RANDOM,并且要在这行代码前调用函数srand()来确保生成随机结果
*/
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($m),MCRYPT_RAND);
/*
*创建mycrypt在执行加密是需要的缓存
*/
mcrypt_generic_init($m,$key,$iv);
/*
*对数据进行加密
*/
$data = mcrypt_generic($m,$data);
/*
*执行加密后,关闭全部缓存及模块
*/
mcrypt_generic_deinit($m);
mcrypt_module_close($m);
/*
*对于cookie数据来说,必须经过base64_encode()处理才适合保存到cookie里面
*/
setcookie('thing1',base64_encode($data));
setcookie('thing3',"aaa",time()-1000);
setcookie('thing2',base64_encode($iv));
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="utf-8">
<title>crypt</title>
</head>
<body>
<p>the cookie has been sent.its value is '<?php echo base64_encode($data) ?>'</p>
</body>
</html>
<?php
if(isset($_COOKIE['thing1']) && isset($_COOKIE['thing2'])){
$key = md5('77 public drop-shadow java');
$m = mcrypt_module_open('rijndael-256','','cbc','');
$iv = base64_decode($_COOKIR['thing2']);
mcrypt_generic_init($m,$key,$iv);
$data = mcrypt_generic($m,base64_decode($_COOKIE['thing1']));
mcrypt_generic_deinit($m);
mcrypt_module_close($m);
echo '<p>the cookie has been received.its value is "'.trim($data).'"</p>';
}else{
echo "<p>no cookie</p>";
}
?>