技术饭
PHP简单对称加密算法之加密、简单对称加密算法之解密,以及简单的混淆加密。
PHP简单对称加密算法之加密、简单对称加密算法之解密,以及简单的混淆加密。
平时我们使用的PHP加密方法都是一些不可逆的加密函数为:md5()、sha1()、crypt()等。md5() 用来计算 MD5 哈稀。语法为:md5(); crypt() 将字符串用 UNIX 的标准加密 DES 模块加密。这是单向的加密函数,无法解密。
可逆转的加密有:base64_encode()、urlencode() 相对应的解密函数:base64_decode() 、urldecode() 。base64_encode() 将字符串以 MIME BASE64 编码。此编码方式可以让中文字或者图片也能在网络上顺利传输。 它的解密函数为:base64_decode(); 将复回原样。urlencode() 将字符串以 URL 编码。例如空格就会变成加号。它的解密函数为:urldecode(); 将复回原样。
1、简单对称加密算法之加密、 简单对称加密算法之解密
/**
* 简单对称加密算法之加密
* @param String $string 需要加密的字串
* @param String $skey 加密EKY
*/
function encode($string = '', $skey = 'cxphp') {
if (!is_numeric($string) && empty($string)) {
return '';
}
$strArr = str_split(base64_encode($string));
$strCount = count($strArr);
foreach (str_split($skey) as $key => $value) {
$key < $strCount && $strArr[$key] .= $value;
}
return str_replace(array('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr));
}
/**
* 简单对称加密算法之解密
* @param String $string 需要解密的字串
* @param String $skey 解密KEY
*/
function decode($string = '', $skey = 'cxphp') {
if (!is_numeric($string) && empty($string)) {
return '';
}
$strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2);
$strCount = count($strArr);
foreach (str_split($skey) as $key => $value) {
$key <= $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
}
return base64_decode(join('', $strArr));
}
/**
* [randcode 获取0-9,a-z,A-Z的随机数]
* @param integer $length [长度]
*/
function randcode($length = 6) {
$range_arr = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9));
shuffle($range_arr);
$range_arr = array_splice($range_arr, 0, $length);
return implode('', $range_arr);
}
2、自定义混淆加密、解密方法
//加密参数
private $scret_key = 'abc';
/**
* [encode 加密]
* @param string $value [加密字段]
*/
private function encode($value = '') {
//如果是空则返回空
if(empty($value)){
return '';
}
//返回加密的随机字符串
return $value . $this->scret_key . md5(randcode(10));
}
/**
* [decode 解密]
* @param string $value [解密字段]
*/
private function decode($value = '') {
//如果是空则返回空
if(empty($value)){
return '';
}
//返回加密的随机字符串
$res = explode($this->scret_key, $value);
return $res[0];
}
3、使用
1)、加密:先混淆加密,再对称加密
2)、解密:先对称解密,再混淆解密
文明上网理性发言!