❶ ajax请求的URL可以加密吗
可以加密,而且对伊一些敏感度搞的项目更要加设置加密:
首先是密钥交换的过程,Diffie-Hellman密钥交换算法参考维基网络的文档:http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange ,client端js语言,服务端php语言 用DH密钥交换算法交换密钥。
js部分:
varg="2";
varp="28303789813787064911279666129";
functiondoStaff(){
varbig_a=randBigInt(100);
varbig_p=str2bigInt(p,10,0);
varbig_g=str2bigInt(g,10,0);
varA=powMod(big_g,big_a,big_p);
varstr_A=bigInt2str(A,10);
varB;
varsecret;
$.ajax({
url:'server.php',
type:'GET',
async:false,
data:{"A":str_A},
cache:false,
timeout:5*1000,
dataType:'json',
success:function(data,status,xhr){
B=str2bigInt(data.B,10,0);
},
error:function(){
alert(2);
}
});
secret=powMod(B,big_a,big_p);
secret=bigInt2str(secret,10);
注明:上边的代码中,最后的到的secret,就是最终和服务端协商一致的密钥(这是一个很多位数字的字符串,我们的密钥使用16字节,那么我们可以考虑对它md5,作为对称加密的密钥)。
上述代码中bigint相关的js,直接使用的一个开源的bigint.js(js代码有不开源的吗?^_^)。
php部分:
<?php
$g="2";
$p="28303789813787064911279666129";
$b="86410430023";//TODO:.
$A=$_REQUEST['A'];
$B=bcpowmod($g,$b,$p);
$secret=bcpowmod($A,$b,$p);
echo'{"B":"'.$B.'"}';
可见我们采用固定的g和p,这2个变量是公开的,不怕泄漏。
js端首先生成一个100bit长的整数a,并依据公式计算出A, 用ajax的形式发送到服务端php。 服务端收到A,自己生成变量b,依据公式计算出B,响应给客户端js。
此时,服务端和客户端分别可以依据公式计算出一个相同的secret。 这个secret没有在网络中传输过,双方可说是“心照不宣”,且双方自己选定的a和b是保密的,第三方无法根据公开传输的数据推算出a,b,当然也无法得到secret。 这就是DH算法的原理。
❷ 如何修改form表单中的input值并加密
AJAX传输过程会被抓包,而且不是加密的,明文可读
最简单的,应该在提交前,在服务器生成秘钥,然后再客户端和服务端分别存一份,提交前用js进行加密,传到服务端后进行利用秘钥验证,再进行其他的二次加密、解密或保存等操作
❸ sha1加密处理中文时在js和php中不一样怎么办!如何处理!!!
前端对来中文进行encodeURI,这样中文就会源变成字符,英文和数字,再对其进行sha1加密,就可以和php的一致了,之后在后端用urldecode还原为中文就行了。前端和后端的URL编码函数是不同的需要注意。