作为程序员一定要保持良好的睡眠,才能好编程

PHP简单对称加密算法的介绍(代码及加解密基本原理)

发布时间:2019-03-22

对称加密方式有很多种,比如说 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');