帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > PHP编程
mcrypt 编码函数库
作者:佚名 发布时间:2005-04-02 来源:不详
 


要使用本函数库要先准备 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):

  1. ECB (electronic codebook): 适合随机的资料,例如使用另外的密钥。若资料量少且随机时,使用 ECB 较不适合。
  2. CBC (cipher block chaining): 适合文件的加密,安全性较 ECB 好。
  3. CFB (cipher feedback): 适合对位组资料流中的某段独立位组资料 (single bytes) 加密。
  4. 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 之中。参数 mode 表示加密 MCRYPT_ENCRYPT 或是解密 MCRYPT_DECRYPT。参数 iv 为向量初始化 (Initialization vector, IV)

 
 

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·如何利Mcrypt扩展库进行加密和解  (2005-03-11)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·Windows下集成安装Apache,PHP,MYSQ
·Mysql注入:SQL Injection with MyS
·PHP 的来龙去脉
·PHP 的功能概述
·PHP与其它CGI的比较
·PHP 的编译配置详细选项
·php.ini 配置详细选项
·如何写作PHP程序
·Hello,World
·嵌入方法
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统