2021-10-07

【js】 << 左位移符  >>右位移符    >>>     ,(逗号)

【PHP】

 

/**

* >>> javascript operator in php x86_64

* @param int $v

* @param int $n

* @return int

*/

function rrr($v, $n)

{

 return ($v & 0xFFFFFFFF) >> ($n & 0x1F);

}

/**

* >> javascript operator in php x86_64

* @param int $v

* @param int $n

* @return int

*/

function rr($v, $n)

{

 $v = $v & 0x80000000 ? $v | 0xFFFFFFFF00000000 : $v & 0xFFFFFFFF;

 return $v >> ($n & 0x1F);

}

/**

* << javascript operator in php x86_64

* @param int $v

* @param int $n

* @return int

*/

function ll($v, $n)

{

 $t = ($v & 0xFFFFFFFF) << ($n & 0x1F);

 return $t & 0x80000000 ? $t | 0xFFFFFFFF00000000 : $t & 0xFFFFFFFF;

}

/**

* @param ...

* @return mixed

* ,(逗号)转换效果(js to PHP)

*  if (i = 0, j = 1, k =2) {}

*  to

*  if (comma($i = 0, $j = 1, $k = 2)) {}

*/

function comma()

{

 $args = func_get_args();

 return end($args);

}

 

 

 

 

 

 

------------------------------------------

 

【js】 charCodeAt 方法

 

【PHP】

 

 

 


function JS_charCodeAt($str, $index){

   //not working!

   $char = mb_substr($str, $index, 1, 'UTF-8');

   if (mb_check_encoding($char, 'UTF-8'))

   {

       $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');

       return hexdec(bin2hex($ret));

   } else {

       return null;

   }

}

 

 

 

 

 

------------------------------------------

【PHP7和CryptoJS的AES加密方式互通 AES-128-ECB】

【js】

 

 

<script type="text/javascript" src="./bower_components/crypto-js/crypto-js.js"></script>

<script type="text/javascript">

   AesKey = 'xxxxx';//加密时用的key,跟php一样

   message='xxxxxxx';//加密后的字符窜

   var ECBOptions = {

       mode: CryptoJS.mode.ECB,

       padding: CryptoJS.pad.Pkcs7

   };

   var key = CryptoJS.enc.Utf8.parse(AesKey);

   var bytes  = CryptoJS.AES.decrypt(message, key,ECBOptions);

   var originalText = bytes.toString(CryptoJS.enc.Utf8);

   console.log(originalText)

</script>

 

 

 

 

【php】

 

class AES

{

   /**

    *

    * @param string $string 需要加密的字符串

    * @param string $key 密钥

    * @return string

    */

   public static function encrypt($string, $key)

   {

       // openssl_encrypt 加密不同Mcrypt,对秘钥长度要求,超出16加密结果不变

       $data = openssl_encrypt($string, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);

       return base64_encode($data);

   }

   /**

    * @param string $string 需要解密的字符串

    * @param string $key 密钥

    * @return string

    */

   public static function decrypt($string, $key)

   {

       return openssl_decrypt(base64_decode($string), 'AES-128-ECB', $key, OPENSSL_RAW_DATA);

   }

   /**

    * 获取秘钥

    * @return string

    */

   public static function getSecretKey()

   {

      $str='xxx';//生成16位的字符窜

       return $str;

   }

}

 

 

 

 

 

收集2

 

 

【php】

 

/**加密

    * @param $data

    * @return string

    */

   function encrypt($data)

   {

       $key = "1234567887654321";//秘钥必须为:8/16/32位

       $iv = "1234567887654321";

       $base64_str = base64_encode(json_encode($data));

       $encrypted = openssl_encrypt($base64_str, "aes-128-cbc", $key, OPENSSL_ZERO_PADDING, $iv);

       return base64_encode($encrypted);

   }

   /**解密

    * @param $data

    * @return mixed

    */

   function decrypt($data)

   {

       $encrypted = base64_decode($data);

       $key = "1234567887654321";//秘钥必须为:8/16/32位

       $iv = "1234567887654321";

       $decrypted = openssl_decrypt($encrypted, 'aes-128-cbc', $key, OPENSSL_ZERO_PADDING, $iv);

       return json_decode(base64_decode($decrypted), true);

   }

$data = ['username'=>'admin','pwd'=>'admin'];  

$encrypt=encrypt($data);

$str=decrypt($encrypt);

var_dump($str);

 

 

 

【js】

 

<!DOCTYPE html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <title>Title</title>

   <script src="./crypto-js-3.1.9-1/crypto-js.js"></script>

   <script type="text/javascript">



       /**加密

        *

        * @param data

        * @returns {string}

        */

       function encrypt(data) {

           let text = JSON.stringify(data);

           text = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)).toString();

           let key = CryptoJS.enc.Utf8.parse('1234567887654321'); //为了避免补位,直接用16位的秘钥

           let iv = CryptoJS.enc.Utf8.parse('1234567887654321'); //16位初始向量

           let encrypted = CryptoJS.AES.encrypt(text, key, {

               iv: iv,

               mode: CryptoJS.mode.CBC,

               padding: CryptoJS.pad.ZeroPadding

           }).toString();

           return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(encrypted)).toString();

       }

       

       /**解密

        *

        * @param data

        * @returns {string}

        */

       function decrypt(data) {

           let encrypted = CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(data)).toString();

           let key = CryptoJS.enc.Utf8.parse('1234567887654321'); //为了避免补位,直接用16位的秘钥

           let iv = CryptoJS.enc.Utf8.parse('1234567887654321'); //16位初始向量

           let decrypted = CryptoJS.AES.decrypt(encrypted, key, {

               iv: iv,

               mode: CryptoJS.mode.CBC,

               padding: CryptoJS.pad.ZeroPadding

           }).toString(CryptoJS.enc.Utf8);

           return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(decrypted)).toString();

       }





       let data = {"username": "admin", "pwd": "passwd"};

       let encrypt_data = encrypt(data);

       let decrypt_data = decrypt(encrypt_data);

       console.log(decrypt_data);

   </script>

</head>

<body>



</body>

</html>

 

 

 

 

自个收集

 

【php】

 

 

function sign($a) {

   $text = $a;

   $key = md5($text);  //密钥1 秘钥必须为:8/16/32位

   $iv  = 'ren163com5201314';//密钥2 秘钥必须为:8/16/32位

       

   $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);

   $encrypted = base64_encode($encrypted);

   

   return $encrypted;

}

 

 

【js】

 


var sign = function(a) {

   var b = CryptoJS.MD5(a);

   var c = CryptoJS.enc.Utf8.parse(b);

   var d = CryptoJS.enc.Utf8.parse('ren163com5201314');

   var e = CryptoJS.AES.encrypt(a, c, {

       iv: d,

       mode: CryptoJS.mode.CBC,

       padding: CryptoJS.pad.ZeroPadding

   });

   return e.toString()

}

 

打赏

好文章,更需要你的鼓励

本文由 氢设计 创作,除注明转载/出处外,均为本站原创,转载前请务必署名

最后编辑时间为:2021-11-23 10:21:01

本文链接:https://www.h2sheji.com/show-100.html