JWT加密
2024-10-01 09:48:19
JWT是一种加密算法,为了防止请求的信息在传输途中被拦截修改
JWT的引用:
install-package jwt
JWF由三部分组成:Header,Payload,Signature
Payload中放的是传输的数据
Header和Payload部分的内容是Base64编码,可以轻松的解码,所以Payload中不要放机密信息
Signature是Header,Payload和SecretKey(秘钥) 的内容合在一起进行加密得到的,所以没有秘钥的人绝对解不开,而且其中某个部分被改动后就会匹配不上,从而防止被拦截修改
加密
//要传输的数据
var payload = new Dictionary<string, object>
{
{ "UserId", },
{ "UserName", "admin" }
};
//秘钥,注意不要泄露
var secret = "XXXXXXXXX"; IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder); string token = encoder.Encode(payload, secret); //加密
解密
var token="aaaaaaa.bbbbbbbbbbb.cccccccccccc"; //加密后的数据
var secret = "XXXXXXXXXXXXX"; //秘钥
try
{
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); var json = decoder.Decode(token, secret, verify: true); //解密 }
catch (TokenExpiredException)
{
Console.WriteLine("Token has expired");
}
catch (SignatureVerificationException)
{
Console.WriteLine("Token has invalid signature");
}
如果要设置过期时间就在payload中添加一个名为exp的值,这个值给过期时间到1970/1/1 00:00:00期间的秒数
double exp = (DateTime.UtcNow.AddSeconds() - new DateTime(, , )).TotalSeconds; //获取当前时间,在它之上增加10秒,减去1970/1/1,转为秒
如果此数据在过期时间之后才传到,就会失效
最新文章
- iOS中关于NavigationController中preferredStatusBarStyle一直不执行的问题
- JavaScript在A页面判断B页面加载完毕(iframe load)
- Tomcat Shell脚本(启动|关闭|重启|状态)
- mac iterm2配置
- 省市二级联动(原生JS)
- JSONP实现跨域
- 针对SYN洪水攻击的防御措施
- HttpSession--会话
- 关于malloc申请的动态内存的问题
- SQL SERVER 复制相关存储过程
- iOS开发——网络编程Swift篇&;(三)同步Get方式
- 转:理解 Linux 的硬链接与软链接
- 看了一个烟花的html作品 --引用:http://www.w3cfuns.com/blog-5444049-5404365.html
- 【Spark2.0源码学习】-10.Task执行与回馈
- 32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)
- 纠错式教学法对比鼓励式教学法 -----Lily、贝乐、英孚,乐加乐、剑桥国际、优学汇、北外青少
- linux操作命令 开发人员需要掌握的一些命令
- Java内存泄漏定位
- MonkeyRunner 之如何获取APP的Package Name和Activity Name
- JavaBeansDataExchange could not instantiate result class