用crypto-js进行登录前加密,服务器端php解密

1、首先,要下载/crypto-js.js文件。网上很多链接是google提供的,国内连不上。建议在CSDN里找一个帖子下载。我在这里就不提供了。
2、在登录界面,包含crypto-js.js文件。比如,加入:<script language=JavaScript src="js/crypto-js.js" type="text/JavaScript"></script>
3、在登录界面,使用js函数:
function encrypt(input, key)

  return CryptoJS.TripleDES.encrypt(input,CryptoJS.enc.Utf8.parse(key), {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
}

变量 key可以是固定的数值,但建议使用Session,生成随机数,加强安全性

4、我的代码(js + php):

登录界面:

<?php
$desKeyStr = getRndNum(24);  //自己做的函数,生成24位随机码
$_SESSION["sessionDesKeyStr"]=$desKeyStr;  //用Sessiom保存key
?>
......
<script language="JavaScript">
var key="<?=$desKeyStr?>";
//加密
function encrypt(input, key)

  return CryptoJS.TripleDES.encrypt(input,CryptoJS.enc.Utf8.parse(key), {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
}

function sbmlogin()
{
    var message1=document.form_login.username.value;  //用户名
    var ciphertext1 = encrypt(message1,key);  //用户名加密
    var message2=document.form_login.password.value;  //密码
    var ciphertext2 = encrypt(message2,key);  //密码加密
    document.form_login.username.value="**************";   //加密是为了不在报文中看到用户名密码,所以提交表单时原来的输入框输入给换掉
    document.form_login.password.value="**************";
    document.form_login.loginStr.value=ciphertext1+"|"+ciphertext2;  //loginStr是 hidden的对象,将加密用户名密码提交服务器
    document.form_login.submit();
}
</script>

服务器端代码(php):

登录文件的代码中加入函数:

function DesDecrypt($data,$key)//解密
{
    $decData = mcrypt_decrypt('tripledes', $key, base64_decode($data), 'ecb');
    $decData=trim($decData); 
    $dec_s = strlen($decData);
    $padding = ord($decData[$dec_s-1]);
    $decData = substr($decData, 0, -$padding);
    return $decData;
}

//获得解密的用户名密码:
<?php
    $lgnstr=$_POST["lgnstr"];
    $temparr=explode("|",$lgnstr);
    $desKeyStr = $_SESSION["SessiondesKeyStr"];
    $username = DesDecrypt($temparr[0],$desKeyStr);
    $password = DesDecrypt($temparr[1],$desKeyStr);
?>
 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值