[PHP] 纯文本查看 复制代码 /**
* 子程序 encrypt, 文本型, 公开
* @param string 数据
* @param string 密匙
* @Return string
*/
function encrypt($data, $key) {
$des = new DES();
$encryptedData = strToByte($data);
$length = byteLen($encryptedData);
if ($length % 8 != 0) {
$encryptedData .= getEmptyByteSet(8 - $length % 8);
}
$encryptedData = $des->encryptByteEcbNoPadding($encryptedData, strToByte($key));
return base64Encode(byteToHex($encryptedData));
}
/**
* 子程序 decrypt, 文本型, 公开, 解密数据
* @param string 数据
* @param string 密匙
* @return string
*/
function decrypt($data, $key) {
$des = new DES();
$decryptedData = $des->decryptByteEcbNoPadding(hexToByte($data), strToByte($key));
return byteToStr($decryptedData);
}
/**
* 把字符串转换成字节集
* @param string $str
* @return string
*/
function strToByte($str) {
return mb_convert_encoding($str, 'UCS-2LE', 'UTF-8');
}
/**
* 把字节集转换成字符串
* @param string $byteSet
* @return string
*/
function byteToStr($byteSet) {
return mb_convert_encoding($byteSet, 'UTF-8', 'UCS-2LE');
}
/**
* 取字节集长度
* @param string $byteSet
* @return int
*/
function byteLen($byteSet) {
return strlen($byteSet) / 2;
}
/**
* 把字节集转换成十六进制字符串
* @param string $byteSet
* @return string
*/
function byteToHex($byteSet) {
$hex = '';
for ($i = 0, $len = strlen($byteSet); $i < $len; $i++) {
$hex .= str_pad(dechex(ord($byteSet[$i])), 2, '0', STR_PAD_LEFT);
}
return $hex;
}
/**
* 把十六进制字符串转换成字节集
* @param string $hex
* @return string
*/
function hexToByte($hex) {
$byteSet = '';
for ($i = 0, $len = strlen($hex); $i < $len; $i += 2) {
$byteSet .= chr(hexdec(substr($hex, $i, 2)));
}
return $byteSet;
}
/**
* 获取指定长度的空白字节集
* @param int $length
* @return string
*/
function getEmptyByteSet($length) {
return str_repeat("\0", $length);
}
// DES 类,实现了加密、解密等方法,请根据自己的需求实现
class DES {
public function encryptByteEcbNoPadding($data, $key) {
// TODO: 实现 DES 加密
}
public function decryptByteEcbNoPadding($data, $key) {
// TODO: 实现 DES 解密
}
}
|