C# JWT加密和解密
一、管理NuGet程序包:
二、新建一个Winform项目:
using JWT;
using JWT.Algorithms;
using JWT.Exceptions;
using JWT.Serializers;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var payload = new Dictionary<string, object>
{
{"UserId",123 },
{"UserName","admin" }
};
var secret = "GQDstc3214345345";
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm,serializer,urlEncoder);
var token = encoder.Encode(payload,secret);
//Console.WriteLine(token);
textBox1.Text = token;
}
private void button2_Click(object sender, EventArgs e)
{
var token = textBox1.Text;
var secret = "GQDstc3214345345";
try
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer,provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer,validator,urlEncoder, algorithm);
var json = decoder.Decode(token,secret,verify:true);
textBox2.Text = json;
MessageBox.Show("解密成功!");
}
catch(TokenExpiredException)
{
MessageBox.Show("Token 已经过期!");
}
catch(SignatureVerificationException)
{
MessageBox.Show("签名校验失败,数据可能被篡改!");
}
}
}
}
运行效果:
备注:增加Token过期时间:
private void button1_Click(object sender, EventArgs e)
{
double exp = (DateTime.UtcNow.AddSeconds(10) - new DateTime(1970, 1, 1)).TotalSeconds;//10秒后过期
var payload = new Dictionary<string, object>
{
{"UserId",123 },
{"UserName","admin" },
{"exp",exp }
};
var secret = "GQDstc3214345345";
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm,serializer,urlEncoder);
var token = encoder.Encode(payload,secret);
//Console.WriteLine(token);
textBox1.Text = token;
}
private void button2_Click(object sender, EventArgs e)
{
var token = textBox1.Text;
var secret = "GQDstc3214345345";
try
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer,provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer,validator,urlEncoder, algorithm);
var json = decoder.Decode(token,secret,verify:true);
textBox2.Text = json;
MessageBox.Show("解密成功!");
}
catch(TokenExpiredException)
{
MessageBox.Show("Token 已经过期!");
}
catch(SignatureVerificationException)
{
MessageBox.Show("签名校验失败,数据可能被篡改!");
}
}