首页 > 编程语言 >小程序 SHA1加密算法使用

小程序 SHA1加密算法使用

时间:2023-01-03 15:35:52浏览次数:42  
标签:function SHA1 return 16 程序 0x80 var new 加密算法


创建一个js文件,或写入util.js中

//SHA1 加密
function encodeUTF8(s) {
var i, r = [], c, x;
for (i = 0; i < s.length; i++)
if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
else {
if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
else r.push(0xE0 + (c >> 12 & 0xF));
r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
};
return r;
};

// 字符串加密成 hex 字符串
function sha1(s) {
var data = new Uint8Array(encodeUTF8(s))
var i, j, t;
var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
s[l - 1] = data.length << 3;
var w = [], f = [
function () { return m[1] & m[2] | ~m[1] & m[3]; },
function () { return m[1] ^ m[2] ^ m[3]; },
function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
function () { return m[1] ^ m[2] ^ m[3]; }
], rol = function (n, c) { return n << c | n >>> (32 - c); },
k = [1518500249, 1859775393, -1894007588, -899497514],
m = [1732584193, -271733879, null, null, -1009589776];
m[2] = ~m[0], m[3] = ~m[1];
for (i = 0; i < s.length; i += 16) {
var o = m.slice(0);
for (j = 0; j < 80; j++)
w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
};
t = new DataView(new Uint32Array(m).buffer);
for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);

var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
return (e < 16 ? "0" : "") + e.toString(16);
}).join("");

return hex;
};

module.exports = {
sha1: sha1 //导出
}

页面中使用

var util = require('../../utils/util.js'); //加密算法引入

//使用
var password = util.sha1(passw);
var password2 = util.sha1("sss");

 

标签:function,SHA1,return,16,程序,0x80,var,new,加密算法
From: https://blog.51cto.com/u_12422954/5986021

相关文章

  • 小程序开发总结三 弹窗 动态class 发送请求 设置本地储存过期时间
    弹窗<buttonclass="get_codebindtap="get_login">{{get_code}}</button>get_login(e){wx.showToast({title:'请输入手机号码',icon:'none',......
  • Intellij IDEA 在DEBUG模式下如何不执行后续代码直接停止程序
    IntellijIDEA在DEBUG模式下如何不执行后续代码直接停止程序第一步:打断点第二步:找出控制台idea可以使用快捷键:两下alt,点击左下角的debug第三步:出现当前页面然后,在......
  • 课程规划-每天3分钟玩转小程序
    嘿,乡亲们!是不是以为我要放鸽子了?我是会放鸽子的人?!12点没到,差一分钟都不算!这一次的专题是小程序开发,按之前的规划每周一、三、五更新一篇。 《每天3分钟玩转小程序》是一个......
  • 实现可移动悬浮按钮(微信小程序/H5移动端html)
    微信小程序实现方案:我们可以利用微信小程序的内置组件轻松实现!1.将整个屏幕用movable-area组件覆盖,2.在movable-area内部添加一个movable-view实现自由滑动。3.重点:CSS属......
  • 219. 完全背包问题(挑战程序设计竞赛)
    地址https://www.papamelon.com/problem/219有n个重量和价值分别为w_i,v_i的物品。从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。......
  • 第七节 VOR/DME进近程序保护区的绘制
    飞行程序设计软件实践通过前面六节的练习,2023社区版插件的主要功能都已经使用到了。今天通过VOR/DME非精密进近程序,再将这些功能串起来使用一下。今天的软件,我们使......
  • 读书之《程序员修炼之道:从小工到专家》十二月第二篇
    总归是来到最后一章,也结束了这个学期的学习生活有些团队指定某个成员担任项目资料管理员,负责协调文档/代码仓库。其他团队成员的查找资料时,可以首先找这个人。通过阅读正......
  • 程序员什么情况下适合跳槽?
    跳槽的原因是什么?如果一个地方什么都好的话,往往是不会让人萌生去意的,当然不排除有些人就是想出去体验不同的生活,但大多数情况下,是不太会挪窝的。那么,哪些情况下不能轻易做......
  • 从高考到程序员
    一、高考花开花落有尽时,念花香时已千年。也许有很多人认为,每个阶段都该有不同的朋友。然而他们不知道,在岁月的末梢处,会有当时回忆的酸涩。高考对于一个求学之人来说,无......
  • 如何在多个应用程序中共享日志配置
    有的时候你有多个应用程序,它们需要使用相同的日志配置。在这种情况下,你可以将日志配置放在一个共享的位置,然后通过项目文件快速引用。方便快捷,不用重复配置。Directory.Bu......