Srp6a详解-----nodejs

注意:以下是我花费两周时间参考go语言写出来的哦

1、创建srp6a.js和srp6aFunction.js. 一个用来实现srp6a算法,一个用来存公共函数。代码地址:

github地址:https://github.com/ying2025/Spr6a

2、下载big-integer和hash运算的包。下载链接地址分别为:https://www.npmjs.com/package/big-integer 和 https://www.npmjs.com/package/hash.js

其中有一些简单的说明,可根据自己的需要去下载。

3、在引入rp6a.js中引入hash, bigInt,commonFun。

var hash = require('hash.js'); // 引入Hash

var bigInterger = require("big-integer");  // 引入大整型

var commonFun = require('./srp6aInterface.js'); // 引入公共函数部分

4、定义全局变量

var bigInt = bigInterger(0);//初始化一个大整型

var randomSize = 512/2/8;  // 随机数

var MinSaltSize = 16;  // salt的最小

var nil = "";  // err为空

var arrnil = []; //数组为空

var srv = {};  // Server

var cli = {};  // client

5、构造一个Server和Client的公共变量的字面量,如下图所示:其中关于这些变量的具体含义参考:http://www.cppblog.com/Jedimaster/archive/2006/10/14/13674.aspx和http://www.aichengxu.com/os/1659958.htm。

6、定义Server和Client共有的一些方法,例如生成随机数、设置hash方式、初始化参数、数组与数组之间的拷贝、生成Salt等。

拷贝时要采用小端对齐方式。将前面的填充。

计算U

计算M1

 M1验证通过后计算M2

7、定义Server的字面量,然后将srp6aBase和Srp6aServer拷贝给对象srv,然后为srv设置hash的方式和初始化参数。其中iv: bigInterger(0),这样初始化目的是为了判断iv是不是为0。

用b派生出B,b为16进制的字符串,所以bigInterger(b, 16)可以直接这样用。commonFun.bigisZero(i3)就是判断i3的value是否为0的。

srv._B = new Array(srv.byteLen);

 var b_iN = bigInterger(i3).toString(16);

var v_iN = commonFun.Str2Bytes(b_iN);

  padCopy(srv._B, v_iN);

上面一部分代码主要是讲bigInt类型的i3转为数组,然后copy给srv._B

随机生成B

计算S,其中var iu = bigInterger.fromArray(srv._u, 256); 官方文档给的是10进制和2进制,这里需要用到256进制的,所以第二个参数是256.

8、Client字面量定义和初始化,以及设置User's salt

9、计算x以及V。注意hash的运算。这一点吃了很大的亏哦。SHA1(identity | ":" | pass)相当于identity 、:、pass拼接后做hash运算。SHA1(salt | SHA1(identity | ":" | pass))相当于salt和

SHA1(identity | ":" | pass)做hash运算。这一点一定要理解哦。

10、设置Client的a,B

生成随机数A

11、Client计算S

12、Srp6a验证流程如下:

13、测试部分数据

var N = "EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C" +

                "9C256576D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE4" +

                "8E495C1D6089DAD15DC7D7B46154D6B6CE8EF4AD69B15D4982559B29" +

                "7BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA9A" +

                "FD5138FE8376435B9FC61D2FC0EB06E3";

var hexSalt = "BEB25379D1A8581EB5A727673A2441EE"; 

var a = "60975527035CF2AD1989806F0407210BC81EDC04E2762A56AFD529DDDA2D4393";

var b = "E487CB59D31AC550471E81F00F6928E01DDA08E974A004F49E61F5D105284D20";

// console.log('aaa', a)

var id = "alice";

var pass = "password123";

var salt =commonFun.Str2Bytes(hexSalt);// // console.log(hash.utils.toArray(hexn)); 

// console.log("salt", salt);

// N = commonFun.Str2Bytes(hexn);

// commonFun.SetBytes(srv,N)

// console.log(commonFun.SetBytes(srv,N));

var sServer = NewServer(2, N, 1024,"SHA1");

var s = NewClient(2,N,1024,"SHA1");

// console.log(cli);

SetIdentity(id, pass); // 设置cli的id,pass

SetSalt(salt);  // 设置cli的salt

var v= ComputeV();  // 计算cli的_v

// console.log(cli._v)

SetV(v);  // src设置iv

var A = set_a(a)  // cli设置a

SetA(A);  // srv设置A;

var B = set_b(b);  // srv设置b

SetB(B);  // cli设置B

// // console.log(B)

var S1 = ClientComputeS(); // 计算cli的S

var S2 = ServerComputeS(); // 计算cli的S

// bigInterger(S1).compare(S2);

// console.log(S1.toString(16))

// console.log("------------------")

// console.log(S2.toString(16))

// var M1 = ComputeM1(cli);

// console.log(M1)

ComputeM2(srv);

// console.log(M1)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 注意:以下是我花费两周时间参考go语言写出来的哦 1、创建srp6a.js和srp6aFunction.js. 一...
    08f1b6c52d2a阅读 1,241评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,597评论 18 139
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,607评论 2 41
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,305评论 0 6