zoukankan      html  css  js  c++  java
  • 加密解密


    /**
    * api 加密接口,轻量级加密算法
    */
    function erp_api_encrypt($string) {

    $encryptKey = md5('test');
    $keyLen = strlen($encryptKey);

    $data = substr(md5($string.$encryptKey), 0, 8).$string;
    $dataLen = strlen($data);

    $rndkey = array();
    $box = array();
    $cipherText = "";

    for ($i = 0; $i < 256; $i++) {
    $rndkey[$i] = ord($encryptKey[$i % $keyLen]);
    $box[$i] = $i;
    }

    for ($i = 0, $j = 0; $i < 256; $i++) {
    $j = ($j + $box[$i] + $rndkey[$i]) % 256;
    $tmp = $box[$i];
    $box[$i] = $box[$j];
    $box[$j] = $tmp;
    }

    for ($i = 0, $j = 0, $k = 0; $i < $dataLen; $i++) {
    $k = ($k + 1) % 256;
    $j = ($j + $box[$k]) % 256;
    $tmp = $box[$k];
    $box[$k] = $box[$j];
    $box[$j] = $tmp;
    $cipherText .= chr(ord($data[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
    }

    return str_replace('=', '', base64_encode($cipherText));
    }

    /**
    * api 解密接口,轻量级解密算法
    */
    function erp_api_decrypt($cipherText) {

    $encryptKey = md5('test');
    $keyLen = strlen($encryptKey);

    $cipherText = base64_decode($cipherText);
    $textLen = strlen($cipherText);

    $rndkey = array();
    $box = array();
    $decryptText = "";

    for ($i = 0; $i < 256; $i++) {
    $rndkey[$i] = ord($encryptKey[$i % $keyLen]);
    $box[$i] = $i;
    }

    for ($i = 0, $j = 0; $i < 256; $i++) {
    $j = ($j + $box[$i] + $rndkey[$i]) % 256;
    $tmp = $box[$i];
    $box[$i] = $box[$j];
    $box[$j] = $tmp;
    }

    for ($i = 0, $j = 0, $k = 0; $i < $textLen; $i++) {
    $k = ($k + 1) % 256;
    $j = ($j + $box[$k]) % 256;
    $tmp = $box[$k];
    $box[$k] = $box[$j];
    $box[$j] = $tmp;
    $decryptText .= chr(ord($cipherText[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
    }

    if (substr($decryptText, 0, 8) == substr(md5(substr($decryptText, 8).$encryptKey), 0, 8)) {
    return substr($decryptText, 8);
    } else {
    return false;
    }
    }


    /**
    * api 加密接口,轻量级加密算法 key值不固定,copy erp_api_encrypt
    */
    function api_encrypt($string,$key='') {

    //$encryptKey = md5('test');
    $encryptKey = md5($key);
    $keyLen = strlen($encryptKey);

    $data = substr(md5($string.$encryptKey), 0, 8).$string;
    $dataLen = strlen($data);

    $rndkey = array();
    $box = array();
    $cipherText = "";

    for ($i = 0; $i < 256; $i++) {
    $rndkey[$i] = ord($encryptKey[$i % $keyLen]);
    $box[$i] = $i;
    }

    for ($i = 0, $j = 0; $i < 256; $i++) {
    $j = ($j + $box[$i] + $rndkey[$i]) % 256;
    $tmp = $box[$i];
    $box[$i] = $box[$j];
    $box[$j] = $tmp;
    }

    for ($i = 0, $j = 0, $k = 0; $i < $dataLen; $i++) {
    $k = ($k + 1) % 256;
    $j = ($j + $box[$k]) % 256;
    $tmp = $box[$k];
    $box[$k] = $box[$j];
    $box[$j] = $tmp;
    $cipherText .= chr(ord($data[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
    }

    return str_replace('=', '', base64_encode($cipherText));
    }

    /**
    * api 解密接口,轻量级解密算法 key值不固定,copy erp_api_decrypt
    */
    function api_decrypt($cipherText,$key='') {

    //$encryptKey = md5('test');
    $encryptKey = md5($key);
    $keyLen = strlen($encryptKey);

    $cipherText = base64_decode($cipherText);
    $textLen = strlen($cipherText);

    $rndkey = array();
    $box = array();
    $decryptText = "";

    for ($i = 0; $i < 256; $i++) {
    $rndkey[$i] = ord($encryptKey[$i % $keyLen]);
    $box[$i] = $i;
    }

    for ($i = 0, $j = 0; $i < 256; $i++) {
    $j = ($j + $box[$i] + $rndkey[$i]) % 256;
    $tmp = $box[$i];
    $box[$i] = $box[$j];
    $box[$j] = $tmp;
    }

    for ($i = 0, $j = 0, $k = 0; $i < $textLen; $i++) {
    $k = ($k + 1) % 256;
    $j = ($j + $box[$k]) % 256;
    $tmp = $box[$k];
    $box[$k] = $box[$j];
    $box[$j] = $tmp;
    $decryptText .= chr(ord($cipherText[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
    }

    if (substr($decryptText, 0, 8) == substr(md5(substr($decryptText, 8).$encryptKey), 0, 8)) {
    return substr($decryptText, 8);
    } else {
    return false;
    }
    }
  • 相关阅读:
    oracle删除归档日志
    ORA-16014: log 3 sequence# 540 not archived, no available destinations
    rsync
    vmware 虚拟机导入OVF出现路径错误
    RHEL5.X 重启网卡出现./network-functions: line 78: .: ifcfg-eth0: file not found
    AIX 6.1记录
    CentOS网卡显示为__tmpxxxxxxxx
    PowerPiggy 博客
    利用谷歌浏览器插件获得更好的浏览体验
    C# 的 MSIL 简介
  • 原文地址:https://www.cnblogs.com/brady-wang/p/9908486.html
Copyright © 2011-2022 走看看