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);
?>