let jwt = {


    decode(token,secret){


        let [header,content,sign] = token.split('.')


        let h = JSON.parse(this.fromBase64ToString(header))


        let c =  JSON.parse(this.fromBase64ToString(content))


        // 判断 加密后的数据是否一致


        if(sign !== this.sign([header,content]).join('.'),secret){


            throw new Error('Not Allowd');


        }


        //  判断是否在有效期内


        if(ccc.exp && ccc.exp < Date.now()){


            throw new Error('expres time');


        }


        return c


    },


    fromBase64ToString(base64){


        return Buffer.from(base64,'base64').toString('utf8')


    },


    toBase64(str){


        return Buffer.from(str).toString('base64')


    },


    sign(str,secret){


        // 签名


        return require('crypto').createHmac('sha256',secret).update(str).digest('base64');


    },


    encode(payload,secret){


        let header = this.toBase64(JSON.stringify({'typ':"JWT",alg:'HS256'}))  


        let content = this.toBase64(JSON.stringify(payload))  


        // 签名使用 header + . + content


        let sign = this.sign([header,content].join('.'),secret)


        // 生成好了签名


        return [header,content,sign].join('.')


    }


}


// export default jwt


module.export = jwt