【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()
}