小程序学习笔记(二):MD5加密(百度翻译接口请求需要,解决MD5 is not a function报错)

前言:在请求百度翻译接口时,需要MD5加密相关参数。一开始用的MD5文件是在百度翻译接口文档中提供的demo文件里提取的较老版本,因此在引用时一直报MD5 is not a function的错误。经过查找发现是源文件的问题,源文件定义了md5函数,返回值为字符串,所以报错。以下记录解决方法。

md5.js下载: GitHub | 百度翻译接口文档demo

步骤:

  1. 在项目中导入md5.js
    (注:demo中的md5文件,需加入 module.exports{ md5: md5 } 向外暴露md5对象,方便后续的页面调用)
  2. 在需要的页面引入md5.js(定义一个变量接收md5.js中暴露出来的对象)
  3. 页面内方法调用md5对象上面的md5方法加密字符串
使用demo文件的md5.js

md5.js文件目录:
MD5文件项目路径
md5.js:

//md5.js
var MD5 = function (string) {
   
   

    function RotateLeft(lValue, iShiftBits) {
   
   
        return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
    }

    function AddUnsigned(lX, lY) {
   
   
        var lX4, lY4, lX8, lY8, lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
   
   
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
   
   
            if (lResult & 0x40000000) {
   
   
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
   
   
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
   
   
            return (lResult ^ lX8 ^ lY8);
        }
    }

    function F(x, y, z) {
   
    return (x & y) | ((~x) & z); }
    function G(x, y, z) {
   
    return (x & z) | (y & (~z)); }
    function H(x, y, z) {
   
    return (x ^ y ^ z); }
    function I(x, y, z) {
   
    return (y ^ (x | (~z))); }

    function FF(a, b, c, d, x, s, ac) {
   
   
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function GG(a, b, c, d, x, s, ac) {
   
   
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function HH(a, b, c, d, x, s, ac) {
   
   
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function II(a, b, c, d, x, s, ac) {
   
   
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function ConvertToWordArray(string) {
   
   
        var lWordCount;
        var lMessageLength = string.length;
        var lNumberOfWords_temp1 = lMessageLength + 8;
        var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
        var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
        var lWordArray = Array(lNumberOfWords - 1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while (lByteCount < lMessageLength) {
   
   
            lWordCount = (lByteCount - (lByteCount % 4)) / 4;
            lBytePosition = (lByteCount % 4) * 8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount - (lByteCount % 4)) / 4;
        lBytePosition = (lByteCount % 4) * 8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
        lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
        lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
        return lWordArray;
    };

    function WordToHex(lValue) {
   
   
        var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
        for (lCount = 0; lCount <= 3; lCount++) {
   
   
            lByte = (lValue >>> (lCount * 8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
        }
        return WordToHexValue;
    };

    function Utf8Encode(string) {
   
   
        string = string.replace(/\r\n/g, "\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {
   
   

            var c = string.charCodeAt(n);

            if (c < 128) {
   
   
                utftext += String.fromCharCode(c);
            }
            else if ((c > 127) && (c < 2048)) {
   
   
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
   
   
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    };

    var x = Array();
    var k, AA, BB, CC, DD, a, b, c, d;
    var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
    var S21 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值