Skip to content

node的crypto模块 #58

Description

@Wscats
varcrypto=require("crypto");vartoken={createToken: function(obj,timeout){//后来加的时效性 token在30内都是有效的vartimeout=300000;console.log(parseInt(timeout)||0);varobj2={data: obj,//payloadcreated: parseInt(Date.now()/1000),//token生成的时间的,单位秒exp: parseInt(timeout)||10//token有效期};//payload信息varbase64Str=Buffer.from(JSON.stringify(obj2),"utf8").toString("base64");//添加签名,防篡改varsecret="piggyyao.com";varhash=crypto.createHmac('sha256',secret);hash.update(base64Str);varsignature=hash.digest('base64');returnbase64Str+"."+signature;},decodeToken: function(token){vardecArr=token.split(".");if(decArr.length<2){//token不合法returnfalse;}varpayload={};//将payload json字符串 解析为对象try{payload=JSON.parse(Buffer.from(decArr[0],"base64").toString("utf8"));}catch(e){returnfalse;}//检验签名varsecret="piggyyao.com";varhash=crypto.createHmac('sha256',secret);hash.update(decArr[0]);varcheckSignature=hash.digest('base64');return{payload: payload,signature: decArr[1],checkSignature: checkSignature}},checkToken: function(token){varresDecode=this.decodeToken(token);if(!resDecode){returnfalse;}//是否过期varexpState=(parseInt(Date.now()/1000)-parseInt(resDecode.payload.created))>parseInt(resDecode.payload.exp) ? false : true;if(resDecode.signature===resDecode.checkSignature&&expState){returntrue;}returnfalse;}}module.exports=exports=token;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions