Javascript Microsoft JScript运行时错误对象不存在';不支持此属性或方法
因此,我试图在javascript中调用此函数,但它给了我一个错误“MicrosoftJScript运行时错误对象不支持此属性或方法”,我不明白为什么。在尝试调用hmacObj.getHMAC时发生。这来自jsSHA网站:使用hmac-sha1加密算法。谢谢大家!Javascript Microsoft JScript运行时错误对象不存在';不支持此属性或方法,javascript,Javascript,因此,我试图在javascript中调用此函数,但它给了我一个错误“MicrosoftJScript运行时错误对象不支持此属性或方法”,我不明白为什么。在尝试调用hmacObj.getHMAC时发生。这来自jsSHA网站:使用hmac-sha1加密算法。谢谢大家! hmacObj = new jsSHA(signature_base_string,"HEX"); signature = hmacObj.getHMAC(signature_key,"HEX","SHA-1","HEX"); 在
hmacObj = new jsSHA(signature_base_string,"HEX");
signature = hmacObj.getHMAC(signature_key,"HEX","SHA-1","HEX");
在上面,我从sha.js复制了代码
片段:
function jsSHA(srcString, inputFormat) {
/*
* Configurable variables. Defaults typically work
*/
jsSHA.charSize = 8; // Number of Bits Per character (8 for ASCII, 16 for Unicode)
jsSHA.b64pad = ""; // base-64 pad character. "=" for strict RFC compliance
jsSHA.hexCase = 0; // hex output format. 0 - lowercase; 1 - uppercase
var sha1 = null;
var sha224 = null;
它正在调用的函数(在jsSHA函数内部)
this.getHMAC=函数(键、inputFormat、变量、outputFormat){
var formatFunc=null;
var-keyToUse=null;
var blockByteSize=null;
var blockBitSize=null;
var keyWithIPad=[];
var keyWithOPad=[];
var lastArrayIndex=null;
var-retVal=null;
var-keyBinLen=null;
var hashBitSize=null;
//验证输出格式选择
开关(输出格式){
案例“十六进制”:
formatFunc=binb2hex;
打破
案例“B64”:
formatFunc=binb2b64;
打破
违约:
返回“格式不可识别”;
}
//验证哈希变量选择并设置所需的变量
开关(变型){
案例“SHA-1”:
blockByteSize=64;
hashBitSize=160;
打破
案例“SHA-224”:
blockByteSize=64;
hashBitSize=224;
打破
案例“SHA-256”:
blockByteSize=64;
hashBitSize=256;
打破
案例“SHA-384”:
blockByteSize=128;
hashBitSize=384;
打破
案例“SHA-512”:
blockByteSize=128;
hashBitSize=512;
打破
违约:
返回“未识别哈希”;
}
//验证输入格式选择
如果(“十六进制”==输入格式){
//小吃必须成对来
如果(0!==(key.length%2)){
return“键必须以字节为增量”;
}
keyToUse=hex2binb(键);
keyBinLen=key.length*4;
}else if(“ASCII”==输入格式){
keyToUse=str2binb(键);
keyBinLen=key.length*jsSHA.charSize;
}否则{
返回“未知键输入类型”;
}
//这些数据被多次使用,计算并存储它们
blockBitSize=blockByteSize*8;
lastArrayIndex=(blockByteSize/4)-1;
//根据键相对于的大小,找出如何处理键
//散列的块大小
如果(块字节大小<(按键长度/8)){
如果(“SHA-1”==变量){
keyToUse=coreSHA1(keyToUse,keyBinLen);
}否则{
keyToUse=coreSHA2(keyToUse,keyBinLen,变体);
}
//对于所有变体,块大小都大于输出大小
//因此,字符串的末尾永远不会有有用的字节
keyToUse[lastArrayIndex]&=0xFFFFFF00;
}否则如果(blockByteSize>(keyBinLen/8)){
//如果blockByteSize大于密钥长度,则将
//始终在字符串末尾至少有一个“无用”字节
keyToUse[lastArrayIndex]&=0xFFFFFF00;
}
//创建ipad和opad
对于(var i=0;i,所以我发现当我实例化对象时,它并没有在其中创建实际的函数。通过一些调整,我能够让它显示并能够调用函数
还注意到调用Object.getHMAC(String,String,String,String)并不总是理解字符串与其函数兼容。感谢所有帮助您的人。(John&Sean)您确定在此之前没有抛出错误吗?我有日志记录来显示。整个函数定义都在这个错误上面。2010-06-01 14:36:22 T08A0错误-scriptedtest.cpp(102)-Script:scripts/BuildOAuthTwitterRequest.js at.失败。错误:Microsoft JScript运行时错误对象不支持此属性或方法,EXCEPINFO.scode=0x800a01b6(FormatMessage()错误317(0x13d)翻译错误2148139446(0x800a01b6))--------------------------------------signature=hmacObj.getHMAC(signature_key,“HEX”,“SHA-1”,“脚本”\Buffs\BudidoAuthTwitter Realest.jsFube,您使用Firebug或IE开发者工具进入GethMAC,很好地,脚本是通过C++运行的,所以它不是在IE或Firefox中看到的,它的工作很好,它可以通过输出日志文件输出输出HTTP请求。
this.getHMAC = function (key, inputFormat, variant, outputFormat) {
var formatFunc = null;
var keyToUse = null;
var blockByteSize = null;
var blockBitSize = null;
var keyWithIPad = [];
var keyWithOPad = [];
var lastArrayIndex = null;
var retVal = null;
var keyBinLen = null;
var hashBitSize = null;
// Validate the output format selection
switch (outputFormat) {
case "HEX":
formatFunc = binb2hex;
break;
case "B64":
formatFunc = binb2b64;
break;
default:
return "FORMAT NOT RECOGNIZED";
}
// Validate the hash variant selection and set needed variables
switch (variant) {
case "SHA-1":
blockByteSize = 64;
hashBitSize = 160;
break;
case "SHA-224":
blockByteSize = 64;
hashBitSize = 224;
break;
case "SHA-256":
blockByteSize = 64;
hashBitSize = 256;
break;
case "SHA-384":
blockByteSize = 128;
hashBitSize = 384;
break;
case "SHA-512":
blockByteSize = 128;
hashBitSize = 512;
break;
default:
return "HASH NOT RECOGNIZED";
}
// Validate input format selection
if ("HEX" === inputFormat) {
// Nibbles must come in pairs
if (0 !== (key.length % 2)) {
return "KEY MUST BE IN BYTE INCREMENTS";
}
keyToUse = hex2binb(key);
keyBinLen = key.length * 4;
} else if ("ASCII" === inputFormat) {
keyToUse = str2binb(key);
keyBinLen = key.length * jsSHA.charSize;
} else {
return "UNKNOWN KEY INPUT TYPE";
}
// These are used multiple times, calculate and store them
blockBitSize = blockByteSize * 8;
lastArrayIndex = (blockByteSize / 4) - 1;
// Figure out what to do with the key based on its size relative to
// the hash's block size
if (blockByteSize < (keyBinLen / 8)) {
if ("SHA-1" === variant) {
keyToUse = coreSHA1(keyToUse, keyBinLen);
} else {
keyToUse = coreSHA2(keyToUse, keyBinLen, variant);
}
// For all variants, the block size is bigger than the output size
// so there will never be a useful byte at the end of the string
keyToUse[lastArrayIndex] &= 0xFFFFFF00;
} else if (blockByteSize > (keyBinLen / 8)) {
// If the blockByteSize is greater than the key length, there will
// always be at LEAST one "useless" byte at the end of the string
keyToUse[lastArrayIndex] &= 0xFFFFFF00;
}
// Create ipad and opad
for (var i = 0; i <= lastArrayIndex; i++) {
keyWithIPad[i] = keyToUse[i] ^ 0x36363636;
keyWithOPad[i] = keyToUse[i] ^ 0x5C5C5C5C;
}
// Calculate the HMAC
if ("SHA-1" === variant) {
retVal = coreSHA1(keyWithIPad.concat(strToHash), blockBitSize + strBinLen);
retVal = coreSHA1(keyWithOPad.concat(retVal), blockBitSize + hashBitSize);
} else {
retVal = coreSHA2(keyWithIPad.concat(strToHash), blockBitSize + strBinLen, variant);
retVal = coreSHA2(keyWithOPad.concat(retVal), blockBitSize + hashBitSize, variant);
}
return (formatFunc(retVal));
};