Home > Article > Backend Development > 求php好手,看下这一段加密算法的原理
求php高手,看下这一段加密算法的原理
<br /> <br /> function sys_auth($str, $action = 'encode', $key = ''){<br /> $key = md5($key);<br /> $str = $action == 'encode' ? $str : base64_decode($str);<br /> <br /> <br /> $strlen = strlen($str);<br /> <br /> $keylen = strlen($key);<br /> <br /> $code = '';<br /> for($i = 0; $i < $strlen; $i++){<br /> $k = $i % $keylen;<br /> $code .= $str[$i] ^ $key[$k];<br /> }<br /> $code = $action == "decode" ? $code : base64_encode($code);<br /> return $code;<br /> }<br /> <br /> <br />
<br /> <br /> function sys_auth($str, $action = 'encode', $key = ''){<br /> $key = md5($key);<br /> echo '<br>$key:'.$key;<br /> $str = $action == 'encode' ? $str : base64_decode($str);<br /> <br /> echo '<br>加密方式的$str:'.$str;<br /> <br /> $strlen = strlen($str);<br /> echo '<br>$str长度'.$strlen;<br /> <br /> $keylen = strlen($key);<br /> echo '<br>$keylen长度'.$keylen;<br /> <br /> $code = '';<br /> for($i = 0; $i < $strlen; $i++){<br /> $k = $i % $keylen;<br /> echo "<br>第".$i."次循环的\$k的值是".$k;<br /> $code .= $str[$i] ^ $key[$k];<br /> echo "<br>第".$i.'次循环$k值是'.$k;<br /> echo "<br>第".$i.'次循环$str[$i]值是'.$str[$i];<br /> echo "<br>第".$i.'次循环$key[$k]值是'.$key[$k];<br /> echo "<br>第".$i."次循环的\$code的值是".$code."<br><br><br><br><br>";<br /> }<br /> $code = $action == "decode" ? $code : base64_encode($code);<br /> echo "<br>".$code;<br /> return $code;<br /> }<br /> <br /> <br /> 得到的结果是:<br /> [code=PHP]<br /> $key:c81e728d9d4c2f636f067f89cc14862c<br /> 加密方式的$str:123456<br /> $str长度6<br /> $keylen长度32<br /> 第0次循环的$k的值是0<br /> 第0次循环$k值是0<br /> 第0次循环$str[$i]值是1<br /> 第0次循环$key[$k]值是c<br /> 第0次循环的$code的值是R<br /> <br /> <br /> <br /> <br /> <br /> 第1次循环的$k的值是1<br /> 第1次循环$k值是1<br /> 第1次循环$str[$i]值是2<br /> 第1次循环$key[$k]值是8<br /> 第1次循环的$code的值是R <br /> <br /> <br /> <br /> <br /> <br /> 第2次循环的$k的值是2<br /> 第2次循环$k值是2<br /> 第2次循环$str[$i]值是3<br /> 第2次循环$key[$k]值是1<br /> 第2次循环的$code的值是R <br /> <br /> <br /> <br /> <br /> <br /> 第3次循环的$k的值是3<br /> 第3次循环$k值是3<br /> 第3次循环$str[$i]值是4<br /> 第3次循环$key[$k]值是e<br /> 第3次循环的$code的值是R Q<br /> <br /> <br /> <br /> <br /> <br /> 第4次循环的$k的值是4<br /> 第4次循环$k值是4<br /> 第4次循环$str[$i]值是5<br /> 第4次循环$key[$k]值是7<br /> 第4次循环的$code的值是R Q<br /> <br /> <br /> <br /> <br /> <br /> 第5次循环的$k的值是5<br /> 第5次循环$k值是5<br /> 第5次循环$str[$i]值是6<br /> 第5次循环$key[$k]值是2<br /> 第5次循环的$code的值是R Q<br /> <br /> <br /> <br /> <br /> <br /> UgoCUQIE<br /> 加密后:UgoCUQIE<br /> <br /> <br />