2

我有一个有趣的问题,我相信这里的其他人会很容易解决。我需要散列整个查询字符串,然后在发布数据中包含该散列值。

在尝试了其他几种方式之后,我正在尝试使用 javascript 来做到这一点。不知何故,似乎将字符串从要散列的表单中拉到一起的顺序与提交时将其拉到一起的方式不同。

我排除了具有特定类的隐藏元素来构建要散列的查询字符串,然后在最终提交之前使用散列值设置该隐藏元素。

知道我可能做错了什么,或者我如何确保在构建字符串和提交时元素的顺序是相同的?

相关片段:

var allFormDat = document.getElementById("frmPayment").elements;
var hashingString ='';
var hashVal;
for (i=0;i<allFormDat.length;i++) {
    if (allFormDat[i].className!="nohash"){
        hashingString+=allFormDat[i].name+'='+allFormDat[i].value+'&';
    }
} 
hashingString.substring(0, hashingString.length - 1);
hashingString += '[salt]';

hashVal=SHA1(hashingString);
frm.hashValue.value=hashVal;

document.getElementById('frmPayment').submit();
4

1 回答 1

1

首先,您没有对组件进行 URI 编码。您可能应该:

var field = allFormDat[i];
hashingString += encodeURIComponent(field.name) + '='
               + encodeURIComponent(field.value) + '&';

substring不能就地工作。您必须重新分配:

hashingString = hashingString.substring(0, hashingString.length - 1);
于 2013-05-14T02:19:27.830 回答