微信小程序引入外部js实现sha1和md5双重加密

本文档详细介绍了如何在微信小程序中引入并使用sha1和md5进行双重加密,包括下载源码、引入外部js、修改utils/util文件、解决报错问题以及成功加密的步骤。在实施过程中,遇到'sha1.hex_sha1 is not a function'的错误,通过在sha1和md5源码中添加module.exports配置解决了问题。
摘要由CSDN通过智能技术生成

步骤

1.下载sha1和md5的源码并引入微信小程序utils目录下
2.修改utils/util文件的配置内容
3.修改sha1和md5源码中的配置
4.引用加密方法

步骤一:下载源码

见最后的源码

步骤二:引入外部js

引入sha1和md5源码文件

步骤三:修改utils/util文件

// utils/util.js
module.exports = {
   
  formatTime: formatTime,
  hex_sha1: hex_sha1,
  hex_md5: hex_md5
}

步骤四:在js页面中进行加密

var sha1 = require('../../utils/sha1')
var md5 = require('../../utils/md5')
var oldpsw = md5.hex_md5(sha1.hex_sha1(e.detail.value.oldpassword))
var newpsw = md5.hex_md5(sha1.hex_sha1(e.detail.value.newpassword))
console.log(oldpsw)

sha1和md5源码文件引入路径写的是相对路径,根据该文件的具体路径引用。
可以通过分别在sha1和md5源码第一行加

console.log("sha1")
console.log("md5")

来进行测试,是否成功引用

报错:sha1.hex_sha1 is not a function

报错截图
百度了很多微信小程序引用外部js文件的攻略,都只说了上述的4个步骤,但是我测试的时候却报错。
最后功夫不负有心人!!
原来还要分别修改sha1和md5源码,添加module.exports配置

步骤五:修改sha1和md5文件

在sha1.js中添加

module.exports = {
   
  hex_sha1: hex_sha1
}

在md5.js中添加

module.exports = {
   
  hex_md5: hex_md5
}

成功加密

执行步骤4中代码,成功实现加密,明文:123456,加密后如图所示
加密后

源码

sha1.js

/*   
 *   A   JavaScript   implementation   of   the   Secure   Hash   Algorithm,   SHA-1,   as   defined   
 *   in   FIPS   PUB   180-1   
 *   Version   2.1-BETA   Copyright   Paul   Johnston   2000   -   2002.   
 *   Other   contributors:   Greg   Holt,   Andrew   Kepert,   Ydnar,   Lostinet   
 *   Distributed   under   the   BSD   License   
 *   See   http://pajhome.org.uk/crypt/md5   for   details.   
 */
/*   
 *   Configurable   variables.   You   may   need   to   tweak   these   to   be   compatible   with   
 *   the   server-side,   but   the   defaults   work   in   most   cases.   
 */
var hexcase = 0; /*   hex   output   format.   0   -   lowercase;   1   -   uppercase                 */
var b64pad = ""; /*   base-64   pad   character.   "="   for   strict   RFC   compliance       */
var chrsz = 8; /*   bits   per   input   character.   8   -   ASCII;   16   -   Unicode             */

/*   
 *   These   are   the   functions   you'll   usually   want   to   call   
 *   They   take   string   arguments   and   return   either   hex   or   base-64   encoded   strings   
 */
function hex_sha1(s) {
   
    return binb2hex(core_sha1(str2binb(s), s.length * chrsz));
}

function b64_sha1(s) {
   
    return binb2b64(core_sha1(str2binb(s), s.length * chrsz));
}

function str_sha1(s) {
   
    return binb2str(core_sha1(str2binb(s), s.length * chrsz));
}

function hex_hmac_sha1(key, data) {
   
    return binb2hex(core_hmac_sha1(key, data));
}

function b64_hmac_sha1(key, data) {
   
    return binb2b64(core_hmac_sha1(key, data));
}

function str_hmac_sha1(key, data) {
   
    return binb2str(core_hmac_sha1(key, data));
}

/*   
 *   Perform   a   simple   self-test   to   see   if   the   VM   is   working   
 */
function sha1_vm_test() {
   
    return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*   
 *   Calculate   the   SHA-1   of   an   array   of   big-endian   words,   and   a   bit   length   
 */
function core_sha1(x, len) {
   
    /*   append   padding   */
    x[len >> 5] |= 0x80 << (24 - len % 32);
    x[((len + 64 >> 9) << 4) + 15] = len;

    var w = Array(80);
    var a = 1732584193;
    var b = -271733879;
    var c = -1732584194;
    var d = 271733878;
    var e = -1009589776;

    for (var i = 0; i < x.length; i += 16) {
   
        var olda = a;
        var oldb = b;
        var oldc = c;
        var oldd = d;
        var olde = e;

        for (var j = 0; j < 80; j++) {
   
            if (j < 16) w[j] = x[i + j];
            else w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
            var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));
            e = d;
            d = c;
            c = rol(b, 30);
            b = a;
            a = t;
        }

        a = safe_add(a, olda);
        b = safe_add(b, oldb);
        c = safe_add(c, oldc);
        d = safe_add(d, oldd);
        e = safe_add(e, olde);
    }
    return Array(a, b, c, d, e);

}

/*   
 *   Perform   the   appropriate   triplet   combination   function   for   the   current   
 *   iteration   
 */
function sha1_ft(t, b, c, d) {
   
    if (t < 20) return (b & c) | ((~b) & d);
    if (t < 40) return b ^ c ^ d;
    if (t < 60) return (b & c) | (b & d) | (c & d);
    return b ^ c ^ d;
}

/*   
 *   Determine   the   appropriate   additive   constant   for   the   current   iteration   
 */
function sha1_kt(t) {
   
    return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514;
}

/*   
 *   Calculate   the   HMAC-SHA1   of   a   key   and   some   data   
 */
function core_hmac_sha1(key, data) {
   
    var bkey = str2binb(key);
    if (bkey.length > 16) bkey = core_sha1
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值