php实现des加密
2017-04-19 阅读数:292

        开发中碰到的需求,网上介绍的很乱,难得找到一个,但是直接使用会报错,下面是经过自己加工后的Des加密算法类,可以加密,解密,同时支持偏移量参数。

<?php


class Des {

	private $key;
	private $iv; //偏移量

	public function __construct($key, $iv = 0) {
		$this->key = $key;
		$this->iv = $iv == 0 ? $key : $iv;
	}

	//加密
	public function encrypt($str) {
		$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
		$str = $this->pkcs5Pad($str, $size);
		@$data = mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv);
		//$data=strtoupper(bin2hex($data)); //返回大写十六进制字符串
		return base64_encode($data);
	}

	//解密
	public function decrypt($str) {
		$str = base64_decode($str);
		$str = mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_DECRYPT, $this->iv);
		$str = $this->pkcs5Unpad($str);
		return $str;
	}

	public function hex2bin($hexData) {
		$binData = "";
		for ($i = 0; $i < strlen($hexData); $i += 2) {
			$binData .= chr(hexdec(substr($hexData, $i, 2)));
		}
		return $binData;
	}

	public function pkcs5Pad($text, $blocksize) {
		$pad = $blocksize - (strlen($text) % $blocksize);
		return $text . str_repeat(chr($pad), $pad);
	}

	public function pkcs5Unpad($text) {
		$pad = ord($text {strlen($text) - 1});
		if ($pad > strlen($text))
			return false;
		if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
			return false;
		return substr($text, 0, - 1 * $pad);
	}

}

使用示例

<?php
$key = '12345678';
$iv = 0;//偏移量
$des = new Des($key,$iv);
//加密
$str = 'abcd';//待加密串
$result1 = $des->encrypt($str);
var_dump($result1 );
//解密
$result2 = $des->decrypt($result1 );
var_dump($result2);

        示例加密的结果为UUNQKpO/V5PRlS6zxbN2MQ==,有一点需要说明一下,加密使用的key必须要求是8位的字符串,否则是加密不了的。


这里还有一些其他的加密算法

http://blog.dongguagua.com/Index/detail/Id/32.html

前方10米有沙发可抢!
大人,请先右上角登个录 ↑
Copyright@2017-2020 www.dongguagua.com All Right Reserived 京ICP备17025269号