php进行DES加密


刚开始我不知道如何解决这个问题。
我先是在网上搜索php与des的相关事情,很多人反复提到mcrypt这个库。如果你也在找这个苦请先看看phpinfo()有没有输出“--with-mcrypt=static”,如果有的话,就别找了,你的php版本已经集成了mcrypt,可以直接使用。我一开始就浪费了很多时间才发现5.3已经包含它了。如果是5.2版还得自己想办法找找。

我这次是要给java程序提供一些加密数据,mcrypt直接生成的加密数据确实有些问题。还好有位大哥提供了一个程序解决这个问题。我又给这个程序加了一个转十六进制的代码。数据就跟对方对上了。

	/**
	 * des加密函数
	 * @param string $str
	 * @param string $key
	 */
	function encrypt($str,$key = ''){
		$block = mcrypt_get_block_size('des', 'ecb');
		$pad = $block - (strlen($str) % $block);
		$str .= str_repeat(chr($pad), $pad);
		$str = @mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
		return strtoupper(bin2hex($str));
	
	}
	
	/**
	 * des解密函数
	 * @param string $str
	 * @param string $key
	 */
	function decrypt($str,$key = ''){
		$str = hex2bin(strtolower($str));
		$str = @mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
		$block = mcrypt_get_block_size('des', 'ecb');
		$pad = ord($str[($len = strlen($str)) - 1]);
		$str = substr($str, 0, strlen($str) - $pad);
		return $str;
	
	}

	/**
	 * 十六进制转字符串
	 * @param string $hexData
	 */
	function hex2bin($hexData){
		$binData = "";
		for($i = 0;$i < strlen($hexData);$i += 2) {
			$binData .= chr(hexdec(substr($hexData, $i, 2)));
		}
		return $binData;
	}

测试:

$key = 'abcdefg';
$str = 'abcdefg';
$mstr = encrypt($str,$key);
$strX = decrypt($mstr,$key);
echo '<br />' . $strX . ' <=> ' . $mstr;

Have any Question or Comment?

发表回复

Archives