IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS开发 — JWT加密 -> 正文阅读

[移动开发]iOS开发 — JWT加密

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。

头部(Header)

头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。

载荷(playload)

载荷就是存放有效信息的地方。

签证(signature)

jwt的第三部分是一个签证信息,这个签证信息由三部分组成:1,需要base64加密后的header;2,base64加密后的payload;3,使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

secret由前后端约定key,或者使用rsa的方式,使用密钥对;目前我们采用了约定key的方式。

注意??:关于base64加密,同一份内容使用不同语言加密得到的密文可能不相同,但是解析出来的内容相同;

例如:{"alg" : "HS256","typ" : "JWT"}

用OC加密后的密文是:ewogICJhbGciIDogIkhTMjU2IiwKICAidHlwIiA6ICJKV1QiCn0

用JAVA加密后的密文是:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

虽然密文不同,但是最终解析出来的内容是相同的。

出现这样的情况,也许与各种语言之间的编码方式有关系。具体原因仍需探究。

iOS开发 代码如下:

+(NSString *)JWTEncodeString:(NSString *)deviceCodeStr {

? ? NSData *headerJsonData = [NSJSONSerialization dataWithJSONObject:@{@"alg":@"HS256",@"typ":@"JWT"} options:NSJSONWritingPrettyPrinted error:nil];

? ? NSString *header1 = [XmSecretUtils safeUrlBase64Encode:headerJsonData];

? ? NSData *palyloadJsonData = [NSJSONSerialization dataWithJSONObject:@{@"expireDate":[XmTimeUtils getCurrentTimeStamp],@"deviceCode":deviceCodeStr} options:NSJSONWritingPrettyPrinted error:nil];

? ? NSString *palyload1 = [XmSecretUtils safeUrlBase64Encode:palyloadJsonData];

?? ?

? ? NSString *signingInput = [@[header1, palyload1] componentsJoinedByString:@"."];

? ? NSString *key = @"123456";

? ? NSData *inputData = [signingInput dataUsingEncoding:NSUTF8StringEncoding];

? ? NSData *secretData = [key dataUsingEncoding:NSUTF8StringEncoding];

? ? NSData *signedOutputData = [XmSecretUtils signHash:inputData key:secretData error:nil];

? ? NSString *signedOutput = [XmSecretUtils safeUrlBase64Encode:signedOutputData];

? ? NSString *result = [@[header1, palyload1, signedOutput] componentsJoinedByString:@"."];

?? ?

? ? WeeLog(@"sign~~~~~~~~~~~%@~~~~~~~~~~~~~~~~~~~",result);

? ? return result;

}

+(NSString*)safeUrlBase64Encode:(NSData*)data {

? ? // '+' -> '-'

? ? // '/' -> '_'

? ? // '=' -> ''

? ? NSString * base64Str = [QN_GTM_Base64 stringByEncodingData:data];

? ? NSMutableString * safeBase64Str = [[NSMutableString alloc]initWithString:base64Str];

? ? safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"+" withString:@"-"];

? ? safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"/" withString:@"_"];

? ? safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"=" withString:@""];

? ? NSLog(@"safeBase64编码:%@", safeBase64Str);

? ? return safeBase64Str;

}

+ (NSData *)signHash:(NSData *)hash key:(NSData *)key error:(NSError *__autoreleasing *)error {

? ? size_t amount = CC_SHA256_DIGEST_LENGTH;

? ? size_t fullSize = amount * sizeof(unsigned char);

? ? unsigned char* cHMAC = malloc(fullSize);

? ? CCHmacAlgorithm ccAlg = kCCHmacAlgSHA256;

?? ?

? ? CCHmac(ccAlg, key.bytes, key.length, hash.bytes, hash.length, cHMAC);

?? ?

? ? NSData *result = [[NSData alloc] initWithBytes:cHMAC length:fullSize];

? ? free(cHMAC);

? ? return result;

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:25:31  更:2021-07-16 11:26:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 5:33:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码