对称加密方式有很多种,比如说 AES、DES 、3DES 这些加密方式,现在不说这些加密方式,
自己如何实现一个对称加解密的一个方法:
实现原理:
1、定义 加密干扰串(盐)
通过for循环进行加密后的字符串的干扰
2、通过base64_encode、和 base64_decode
3、倘若出现了 + = / 替换成我们内部自定的字符,这样也是可以进行一定量的干扰,防止破坏
看代码:
//加密方法 function encode($string = '', $skey = 'cxphp'){ //通过base64_encode() 对字符编码,并通过函数进行分割 $strArr = str_split(base64_encode($string)); $strCount = count($strArr); foreach (str_split($skey) as $key => $value) { //这里是关键,通过循环,将$value 混合到strArr字符中 $key < $strCount && $strArr[$key] .= $value; } //如果出现了 = + / 这样的字符,按照要求 自动替换成后面的字符 return str_replace(array('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr)); } echo encode('abcdefg'); /** * 简单对称加密算法之解密 * @param String $string 需要解密的字串 * @param String $skey 解密KEY * @return String */ function decode($string = '', $skey = 'cxphp'){ //首先反向替换,然后通过str_split 每次分割成两个字符的数租 $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2); $strCount = count($strArr); //再次将skey 这个字符进行循环遍历,将添加的干扰符号去掉 foreach (str_split($skey) as $key => $value) { if($key <= $strCount && isset($strArr[$key]) && $strArr[$key][1] === $value) $strArr[$key] = $strArr[$key][0]; } return base64_decode(join('', $strArr)); }
通过上面的两个方法,就加解密成功了。
这个也是无法破解的,除非知道你的替换规则。
echo decode('YcWxJpjhZpGVmZwO0O0OO0O0O');