2008年2月27日 星期三

mcrypt使用[PHP]


要使用本函数库要先准备 mcrypt 程序,可以到 ftp://argeas.cs-net.gr/pub/unix/mcrypt 下载这个程序 libmcrypt-x.x.tar.gz。同时在编译 php 程序时需要加入 --with-mcrypt 的选项,俾使本函数库能顺利运作。
本函数提供的编码方式有 des、tripledes、blowfish (默认值)、3-way、safer-sk64、safer-sk128、twofish、tea、rc2 及使用 cbc, ofb, cfb, ecb 作为密码检索的 gost。此外还有 rc6 及 idea 等非免费的编码方式。
见下面列示为已定义的密码:
 

mcrypt_blowfish
mcrypt_des
mcrypt_tripledes
mcrypt_threeway
mcrypt_gost
mcrypt_crypt
mcrypt_des_compat
mcrypt_safer64
mcrypt_safer128
mcrypt_cast128
mcrypt_tean
mcrypt_rc2
mcrypt_twofish (mcrypt 2.x 前的版本用)
mcrypt_twofish128 (mcrypt 2.x 后的版本用)
mcrypt_twofish192
mcrypt_twofish256
mcrypt_rc6
mcrypt_idea
在密码检索本 (cipher) 方面,本函库支持 cbc、ofb、cfb 与 ecb 四种密码检索本。这四种密码检索本的简单叙述如下,更详细的信息请参考 schneier 所着作的 applied cryptography (isbn: 0-471-11709-9):
 

ecb (electronic codebook): 适合随机的资料,例如使用另外的密钥。若资料量少且随机时,使用 ecb 较不适合。
cbc (cipher block chaining): 适合文件的加密,安全性较 ecb 好。
cfb (cipher feedback): 适合对位组资料流中的某段独立位组资料 (single bytes) 加密。
ofb (output feedback): 与 cfb 相容,尤其适合在无法忍受错误波及的应用上。
目前 php 仍无法对单位 (bit) 的熵值做加密解密的步骤,目前只适合对字符串作密码处理。
 
在使用 cfb 及 ofb 二种模式时,必须要向量初始化 (initialization vector, iv),cbc 模式也可以使用向量初始化。
向量初始化的值在加解密时必须是独一无二的,同时也要保持相同。当加密后的资料输出时,也可同时输出密码钥匙 (例如存在文件中);或者也可以将向量初始化的值与加密后的资料一起输出。
 
mcrypt_get_cipher_name: 取得编码方式的名称。
mcrypt_get_block_size: 取得编码方式的区块大小。
mcrypt_get_key_size: 取得编码钥匙大小。
mcrypt_create_iv: 从随机源将向量初始化。
mcrypt_cbc: 使用 cbc 将资料加/解密。
mcrypt_cfb: 使用 cfb 将资料加/解密。
mcrypt_ecb: 使用 ecb 将资料加/解密。
mcrypt_ofb: 使用 ofb 将资料加/解密。
 
mcrypt_get_cipher_name
取得编码方式的名称。
语法: string mcrypt_get_cipher_name(int cipher);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数用来取得编码方式的名称。返回值为名称字符串,若没有指定的编码方式则返回 false 或输入的名称。
使用范例
下例会输出 tripledes 字符串。
<?php
$cipher = mcrypt_tripledes;
print mcrypt_get_cipher_name($cipher);
?>
 
mcrypt_get_block_size
取得编码方式的区块大小。
语法: int mcrypt_get_block_size(int cipher);
返回值: 整数
函数种类: 编码处理
内容说明: 本函数用来取得编码方式的区块大小。参数为编码名称,返回整数单位为位组 (byte)。
 
mcrypt_get_key_size
取得编码钥匙大小。
语法: int mcrypt_get_key_size(int cipher);
返回值: 整数
函数种类: 编码处理
内容说明: 本函数用来取得编码钥匙的大小。参数为编码名称,返回整数治募�单位为位组 (byte)。
 
mcrypt_create_iv
从随机源将向量初始化。
语法: string mcrypt_create_iv(int size, int source);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数用来建立向量初始化 (initialization vector, iv) 的值。参数 size 为指定的向量初始化长度。
参数 source 为随机资料的来源,来源可以是 mcrypt_rand (系统产生的随机值)、mcrypt_dev_random (unix 系统中 /dev/random 的资料)、mcrypt_dev_urandom (unix 系统中 /dev/urandom 的资料),若使用 mcrypt_rand 当做随机源,记得先使用 srand() 产生乱数种子。
使用范例
<?php
$cipher = mcrypt_tripledes;
$block_size = mcrypt_get_block_size($cipher);
$iv = mcrypt_create_iv($block_size, mcrypt_dev_random);
?>
 
mcrypt_cbc
使用 cbc 将资料加/解密。
语法: string mcrypt_cbc(int cipher, string key, string data, int mode, string [iv]);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 cbc 密码检索本 (cipher block chaining),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data 之中。参数 mode 表示加密 mcrypt_encrypt 或是解密 mcrypt_decrypt。参数 iv 是可省略的参数,代表向量初始化 (initialization vector, iv)。
 
mcrypt_cfb
使用 cfb 将资料加/解密。
语法: string mcrypt_cfb(int cipher, string key, string data, int mode, string iv);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 cfb 密码检索本 (cipher feedback),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data 之中。参数 mode 表示加密 mcrypt_encrypt 或是解密 mcrypt_decrypt。参数 iv 是代表向量初始化 (initialization vector, iv)。
 
mcrypt_ecb
使用 ecb 将资料加/解密。
语法: string mcrypt_ecb(int cipher, string key, string data, int mode);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 ecb 密码检索本 (electronic codebook),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data 之中。参数 mode 表示加密 mcrypt_encrypt 或是解密 mcrypt_decrypt。
 
mcrypt_ofb
使用 ofb 将资料加/解密。
语法: string mcrypt_ofb(int cipher, string key, string data, int mode, string iv);
返回值: 字符串
函数种类: 编码处理
内容说明: 本函数使用 ofb 密码检索本 (output feedback),将资料加密及解密。参数 cipher 为加/解密方式,例如 mcrypt_tripledes。参数 key 是密码钥匙,当然要注意保持它的机密性。欲加密或解密的字符串就放在参数 data
 
 

标签:

redhat查看硬件信息[Linux]


#cat /proc/cpuinfo
#cat /proc/meminfo
#fdisk -l
#lspci

标签:

安装mcrypt扩展

mcrypt被用来实现可逆加密
默认没有装这里我要装一下
 
有个依赖库libmcrypt 要先装
位置/usr/ports/security/libmcrypt
 
然后装mcrypt
/usr/ports/security/php5-mcrypt
 
根据提示要在/usr/local/etc/php/extensions.ini
中+上
extension=mcrypt.so
这句
但是装好默认就+上了
 
所以 apachectl restart

OK~

标签:

2008年2月25日 星期一

移动硬盘文件不能删除?

最近在移动硬盘上多了2个文件夹,名字很长(数字字母),怎么也删不掉
估计是借给别人时,在移动硬盘里直接运行安装程序造成的缓存文件
 
尝试了网上所有的办法,除了格式化
硬盘没那么大,都是重要的资料,其实放着也不唉事但就是看着不爽
 
根据提示看来是应为没有文件夹的宿主权限
然后我尝试了一下改变文件夹宿主的操作,结果问题得到了解决
具体操作如下
 
 
右键不能删除的文件夹,属性-》安全-》高级
 
选择  所有者 标签
 
选择当前用户
 
勾选复选框 替换子容器及对象的所有者
 
确定
 
 
然后就可以删除了~~
 
网上的各种做法是在是让我无言。。。。。

标签:

2008年2月19日 星期二

FreeBSD 用cvsd创建cvs服务器

1. 下载及安装

 

用ports 安装cvsd,位于 /usr/ports/devel/cvsd
用ports 安装cvs,位于 /usr/ports/devel/cvs ipv6

创建 cvsd 用户(#useradd)。

2. 修改配置

指定虚拟根目录的实际路径,在RootJail命令后设置
/usr/local/etc/cvsd/cvsd.conf

# RootJail
# This is the location of the chroot jail
# cvs should be run in.
# Specify @#none@# (without quotes) to not use
# a chroot jail.
# This directory should be initialized with
# the cvsd-buildroot script.
RootJail /home/soft/cvsd

创建 /home/soft/cvsd,
使用命令行 /usr/local/sbin/cvsd-buildroot /home/soft/cvsd/ 初始化虚根目录

创建cvsroot 目录 : mkdir /home/soft/cvsd/cvsroot

用命令 cvs -d /home/soft/cvsd/cvsroot init 初始化cvs目录

用命令建立cvs用户:
cvsd-passwd /home/soft/cvsd/cvsroot/ cvsuser:cvsd
上面的命令建立cvsuer 这个帐号,它和系统的 cvsd用户挂接。注意,cvsd是操作系统的用户名,是第一步操作中建立的。
你还可以使用该命令建立其它帐号.

将cvsroot 加入/usr/local/etc/cvsd/cvsd.conf的最后一行,如下面
Repos /cvsroot

此句指明要使用虚拟根下的 "cvsroot" 这个仓库。

3 设置启动脚本
#echo cvsd_enable="YES" >> /etc/rc.conf
#reboot

4.注意事项

cvsd只是cvs的一个外壳程序,将cvs运行在虚拟根环境下,提高系统的安全性。你在安装cvsd后还必须安装cvs程序。

不要跨分区建立仓库,否则会提示找不到用户.
我的/home 和/ 是两个不同的分区.我开始在home下创建仓库,在var下创建虚根目录,作了符号链接后不能读取文件.

声明:

转载此文请保留此声明信息。

驱动开发网 华语地区核心层开发专业网站 http://www.driverdevelop.com

软件创造价值,驱动提供力量!

标签:

2008年2月18日 星期一

iframe自适应高度和宽度

iframe自适应高度和宽度,在页面<head>标签内写入如下。

<script type="text/javascript" language="javascript">

function SetWinHeight(obj)
{
var win=obj;
if (document.getElementById)
{
    if (win && !window.opera)
    {
     if (win.contentDocument && win.contentDocument.body.offsetHeight)
     {
      win.height = win.contentDocument.body.offsetHeight;
      win.width =win.contentDocument.body.offsetWidth;
      }
     else if(win.Document && win.Document.body.scrollHeight)
     {
      win.height = win.Document.body.scrollHeight;
      win.width=win.Document.body.scrollWidth;
      }
    }
}
}

</script>

然后在<body>里面写入如下

<iframe id="frameright" name="frameright" frameBorder="0" scrolling="no" src="My/Default.aspx" width="100%" onload="Javascript:SetWinHeight(this)"></iframe>

标签:

2008年2月13日 星期三

mysql类 自己为求方便封装了一下


<?
############################################################
# What's this . This is a PHP5 CLASS to provide access utility
# for MySQL database.
#
# AUTHOR :: Humen1
# WEB SITE :: http://www.humen1.com
# Vision :: 1.0
#
############################################################
 
class mydb{
///start of the CLASS
 private $host;
 private $usr;
 private $pwd;
 private $db;
 private $charset = NULL;
 private $charsetArray = Array("utf8","big5","gb2312","gbk","latin1");
 private $link;
 private $result;
 private $error = Array();
 /**
 #ERROR = Array(
 # [0]=>,
 # 
 # )
 **/
 
 ###construct
 function mydb($DB_host,$DB_user,$DB_passwd,$DB_name = ""){
  $this->host = $DB_host;
  $this->usr = $DB_user;
  $this->pwd = $DB_passwd;
  $this->db = $DB_name;
 }
 
 ###set database name
 function set_db($DB_name){
  $this->db = $DB_name;
 }
 
 ###get connection flag
 function connection(){
  ///get connection
  $this->link = @mysql_connect($this->host,$this->usr,$this->pwd);
  if(!$this->link){
   $this->error[0] = sprintf("Error connecting to host %s by user %s", $this->host,$this->usr);
  }
  ///select db
  if(!mysql_select_db($this->db,$this->link)){
   $this->error[1] = sprintf("Error in selecting %s database.\n mysql errno is %d and error message is %s",$this->db,mysql_errno($this->link),mysql_error($this->link));
  }
 }
 
 ###set query charset
 function set_charset($Charset){
  if(in_array($Charset,$this->charsetArray)){
   $this->charset = $Charset;
  }
 }
 
 ###Quick execute the statement
 function query($SQL){
  $this->connection();
  if($this->charset !== NULL){
   mysql_query("SET NAMES ".$this->charset , $this->link);
  }
  
  $this->result = mysql_query($SQL , $this->link);
  if(!$this->result){
   $this->error[2] = sprintf("Error query in %s database.\n mysql errno is %d and error message is %s",$this->db,mysql_errno($this->link),mysql_error($this->link));
  }else{
   return $this->result;
  }
 }
 
 ###fetch the result as array
 function fetch($result_type = MYSQL_BOTH){
  ///MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH
  if($result_type == "1") $result_type = MYSQL_NUM;
  if($result_type == "A") $result_type = MYSQL_ASSOC;
  
  if(!$this->result){
   $this->error[3] = "Error fetch array in %s database.There is no Result";
  }else{
   return mysql_fetch_array($this->result,$result_type);
  }
 }
 
 ###fetch the result as object
 function fetch_obj(){
  return ($this->result) ? @mysql_fetch_object($this->result) : false;
 }
 
 ###return the next id
 function next_id(){
  return ($this->link) ? @mysql_insert_id($this->link) : false;
 }
 
 ###return the affectde rows
 function affected_rows(){
  return ($this->link) ? @mysql_affected_rows($this->link) : false;
 }
 
 ###return the rows number from result
 function num_rows(){
  return ($this->result) ? @mysql_num_rows($this->result) : false;
 }
 
 ###return the fields number from result
 function num_fields(){
  return ($this->result) ? @mysql_num_fields($this->result) : false;
 }
 
 ###free the result
 function free(){
  return ($this->result) ? @mysql_free_result($this->result) : false;
 }
 

/****************Advanced Plus************************/
 
 ###get one record only
 function getOne($SQL){
  $SQL .= " LIMIT 1";
  $this->query($SQL);
  return ($this->result) ? @mysql_fetch_row($this->result) : false;
 }
 

///End of the CLASS
}
?>

标签: