PHP 在 post 前加密用户名、密码,密文传输数据

php tytrock ⋅ 于 2017-11-15 10:24:16 ⋅ 1676 阅读

JS加密(使用google crypto-js加密组件,官方地址  本地下载: CryptoJS-v3.1.2.rar

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/aes.js";;></script>
 <script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/pad-zeropadding.js";;></script>
 <script>
    var data = "username";
    var key  = CryptoJS.enc.Latin1.parse('1234567812345678');
    var iv   = CryptoJS.enc.Latin1.parse('1234567812345678');
    //加密
    var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
    document.write(encrypted);//rwRxKql4WWspSBZcV4HP4A==
 </script>


PHP解密

$privateKey = "1234567812345678";
$iv     = "1234567812345678";
$encryptedData = base64_decode("rwRxKql4WWspSBZcV4HP4A==");
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);
echo 'php---'.$decrypted;


==================================================

当出现无法验证密码的情况,通过Laravel dd一下解密的结果,发现后面多了很多“\x00\x00”

TIM截图20171128102351.jpg

解决办法:清楚后面的字符

$cleaned = strval(str_replace("\0", "", $password));



参考文章:

https://blog.catscarlet.com/201701162689.html

本帖已被设为精华帖!
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter