php tea加密,PHP加密技术

使用加密技术可大大地增强安全性能,可以使用PHP的内置加密函数,还可以使用功能强大的加密扩展库。

1.内置加密函数:

PHP提供了比较常用的加密算法,像md5、crypt和sha1,需要时可以直接调用。

①MD5加密算法:

MD5全称是Message-Digest Algorithm 5(信息摘要算法),主要用于让大容量信息在用数字签名软件签署私人密钥前被压缩成一种保密的格式,即把任何一个字符串变换成一定长的大整数。

在PHP中使用MD5加密算法非常方便,只需调用md5()函数即可。语法格式为:

string md5(string $str [, bool $raw_output])

其中,$str参数是要加密的字符串,$raw_output参数是一个布尔值,默认为false表示返回一个32字节的十六进制数据传送散列值,如果值为true,则返回一个16位字节长度的原始二进制数据传送散列值。

由于MD5是单向加密,所以通常使用它对密码进行加密保存,然后对用户输入的密码使用MD5加密后与原始密码相比较实现校验。

②SHA-1加密算法:

SHA-1全称是Secure Hash Algorithm(安全哈希算法),由美国国家安全局设计,同样是单向加密,且提供了比MD5更加安全的加密方式。

PHP中使用sha1()函数进行SHA-1加密。语法格式为:

string sha1(string $str [, bool $raw_output])

其中,$str参数是要加密的字符串,$raw_output参数是一个布尔值,默认为false则返回一个长度为40字节的十六进制数据,如果值为true,则返回一个长度为20位字节的二进制数据。

③crypt()函数:

crypt()函数是一个单向的加密函数,在使用时可以把一个输入的密码和一个预存的密码进行比较,无需任何的解密过程。语法格式为:

string crypt(string $str [, string $salt])

该函数采用以UNIX的DES为基础的加密算法(或者操作系统提供的替代算法)来加密输入的字串。$str参数是要加密的字符串,$salt参数为加密时使用的密钥,如果忽略则会随机生成一个密钥。

2.加密扩展:

PHP还提供了非常强大的加密扩展函数库,这些库可以使数据更加安全,其中有提供双向加密的,还有为大量散列算法提供的,如下表:

扩展包和函数库

详细描述

Mcrypt

提供广泛的加密功能,可以双向加密,用来加密大型文件或数据流

Mhash

支持最流行的散列算法,如MD5

Crypt_Blowfish

可以进行快速双向加密,可以选择使用或不使用密钥

Crypt_RSA

提供RSA一样的密钥生成、加密/解密、数位签署及签署验证功能

Crypt_HMAC

这个类可用来计算兼容RFC2104的散列值

Crypt_DiffieHellman

这是一个在PHP5上的Diffie-Hellman密钥交换协议

PHP提供了众多的加密扩展,但比较常见的就两三种。

①Mcrypt库:

Mcrypt库中有大量的加密函数来对文件和数据流进行加密,Mcrypt库的加密都是针对固定长度的数据块,一般为64或128字节。但由于明文的长度是不固定的,再加上使用相同的密钥来加密相同的明文,可能会得到相同的结果。

Mcrypt库支持多种区块的加密算法,包括Blowfish、DES、TripleDES、SAFER-SK128、TWOFISH、TEA、RC2、3-WAY、SAFER-SK64及下表中的6种加密算法。

缩写

使用例子

详细描述

CBC

MCRYPT_MODE_CBC

密文块链模式,用来加密文件

CFB

MCRYPT_MODE_CFB

密文反馈模式,建议用来加密字节流

STREAM

MCRYPT_MODE_STREAM

特色的流模式,需要资料流算法时使用,例如WAKE或RC4

ECB

MCRYPT_MODE_ECB

电子密码本模式,适合随机数据,可用来加密不同的密码

OFB

MCRYPT_MODE_OFB

8位输出反馈模式,专门用在不允许出错的应用系统

NOFB

MCRYPT_MODE_NOFB

N位输出反馈模式,兼容OFB,但更加安全

Mcrypt库提供了30多个加密和解密函数,最重要最常用的有两个函数:

·mcrypt_encrypt()函数:

mcrypt_encrypt()的语法格式为:

string mcrypt_encrypt(string $dipher, string $key, string $data, string $mode[, string $iv])

其中,$dipher是要使用的加密算法,$key是使用的加密密钥,$mode是指定的6个加密模式中的一个加密模式,$data是要加密的数据,而参数$iv是对cbc、cfb、ofb以及流模式中使用的某种算法。该函数执行后返回加密后的结果字符串。示例:

$str="hello";//加密内容

$key="111";//密码

$cipher=MCRYPT_DES;//密码类型

$modes=MCRYPT_MODE_CBC;//密码模式

$iv=mcrypt_create_iv(mcrypt_get_iv_size($cipher, $modes), MCRYPT_RAND);  //初始化向量

echo "原文:".$str."

";

$str_encrypt=mcrypt_encrypt($cipher, $key, $str, $modes,$iv); //加密函数

echo "密文:".bin2hex($str_encrypt)."

";

?>

·mcrypt_decrypt()函数:

mcrypt_decrypt()是针对mcrypt_encrypt()函数进行解密的函数。语法格式为:

string mcrypt_decrypt(string $dipher, string $key, string $data, string $mode[, string $iv])

其中各个参数的含义与mcrypt_encrypt()函数相同。示例:

$str_decrypt=mcrypt_decrypt($cipher, $key, $str_encrypt, $modes,$iv); //解密函数

echo "还原:".$str_decrypt;

?>

②Mhash库:

Mhash库是一个免费的加密函数开源库,为PHP加密的大量散列值算法提供一个有用的接口。可以用这种算法校验信息和进行数据验证等,还可以处理密码。

Mhash库中最常用的是mhash()函数。语法格式为:

string mhash(int $hash, string $data[, string $key]);

$hash参数用于设置散列算法,下表列出该函数支持的算法:

MHASH_ADLER32

MHASH_HAVAL128

MHASH_MD4

MHASH_SHA256

MHASH_CRC32

MHASH_HAVAL160

MHASH_MD5

MHASH_TIGER

MHASH_CRC32B

MHASH_HAVAL192

MHASH_RIPEMD160

MHASH_TIGER128

MHASH_GOST

MHASH_HAVAL256

MHASH_SHA1

MHASH_TIGER160

示例:使用mhash()函数和MD5算法加密

$str="hello";

$PASSMHASH=mhash(MHASH_MD5, $str);

echo "密码散列值:".bin2hex($PASSMHASH);

?>

③PEAR的Crypt_RSA PEAR库:

Crypt_RSA PEAR库允许开发人员使用任意长度的密钥来加密数据,它以RSA区块加密技术为基础,支持双向加密,同时支持任意长度的密钥来解密和解密。

由于Crypt_RSA需要执行大量的数学计算,因此需要借助一些其他扩展才能使用,见下表:

模块名称

支持版本

PECL big_ini扩展模块

需要PEAR包1.0.3以上版本

PHP GMP扩展模块

PHP版本

PHP BCMath扩展模块

PHP4/PHP5

示例:使用Crypt_RSA PEAR库对数据加密

require_once 'Crypt/RSA.php';

//产生一对对称密钥

function generate_key_pair() {

global $public_key, $private_key;

$key_pair=new Crypt_RSA_KeyPair(32);

//从这对密钥中提取公钥

$public_key=$key_pair->getPublicKey();

$private_key=$key_pair->getPrivateKey();

}

$file='textfile.txt';

generate_key_pair();

$plain_text=file_get_contents($file);

//把公钥表达为一个字符串

$key=Crypt_RSA_Key::fromString($public_key->toString());

$rsa_obj=new Crypt_RSA;

//用密钥$key加密$plain_text

$encrypted=$rsa_obj->encrypt($plain_text, $key);

$encrypted_file=@fopen('encrypted.txt', 'w');

$ok_encrypt=fwrite($encrypted_file, $encrypted);

?>

④Crypt_HMAC库:

Crypt_HMAC库提供了一个类可以用来计算RFC2104兼容的散列值,只需要指定密钥和明文即可,而且还支持MD5和SHA-1算法。语法格式为:

$var=new Crypt_HMAC(string $key, string $dipher);

其中,$key是要提供的密钥,$dipher是要使用的散列算法。示例:

require_once 'HMAC.php';

//把字符"defre"重复40次来产生一个密钥

$key=str_repeat(chr(defre), 40);

//产生一个Crypt_HMAC类实体

$crypt=new Hmac($key, 'md5');

//散列函数

echo $crypt->sha1('Hello');

$key=str_repeat(chr(0xcc), 10);

$data=str_repeat(chr(0xdd), 50);

//把散列函数的密钥设定为$key

$crypt->setKey($key);

echo $crypt->sha1($data)."\n";

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值