SM3 摘要
类似于 MD5、SHA1 等摘要算法,GMSm3Utils 是一个用于实现 SM3 摘要算法和 HMAC 消息认证码的工具类。SM3 摘要算法密钥为任意非空字符,输出摘要长度为 32 字节,转换为十六进制字符串后长度为 64 个字符。
SM3 摘要计算
SM3 摘要算法支持对文本字符串和二进制数据进行摘要计算。
objc
// 字符串输入,返回十六进制格式的摘要字符串
NSString *digest = [GMSm3Utils hashWithText:@"Hello, SM3!"];
// 二进制数据输入,返回字节数组格式的摘要
NSData *data = [@"Binary Data" dataUsingEncoding:NSUTF8StringEncoding];
NSData *digest = [GMSm3Utils hashWithData:data];
HMAC 计算
HMAC 支持多种摘要算法,默认使用 SM3。支持的算法类型包括:
- SM3 (默认)
- MD5
- SHA1
- SHA224
- SHA256
- SHA384
- SHA512
基础 HMAC 计算(使用默认 SM3 算法)
objc
// 字符串格式输入,返回十六进制的 HMAC 摘要
NSString *hmac = [GMSm3Utils hmacWithText:@"Message" keyText:@"SecretKey"];
// 二进制数据格式输入,返回字节数组格式的 HMAC 摘要
NSData *plainData = [@"123456" dataUsingEncoding:NSUTF8StringEncoding];
NSData *keyData = [@"SecretKey" dataUsingEncoding:NSUTF8StringEncoding];
NSData *hmac = [GMSm3Utils hmacWithData:plainData keyData:keyData];
指定算法类型的 HMAC 计算
objc
// 明文 123456 的 NSData 格式,加密使用的 key 为任意非空
NSData *plainData = [@"123456" dataUsingEncoding:NSUTF8StringEncoding];
NSData *keyData = [@"qwertyuiop1234567890" dataUsingEncoding:NSUTF8StringEncoding];
// 使用不同算法计算 HMAC
NSData *hmacMD5 = [GMSm3Utils hmacWithData:plainData keyData:keyData keyType:GMHashType_MD5];
NSData *hmacSHA1 = [GMSm3Utils hmacWithData:plainData keyData:keyData keyType:GMHashType_SHA1];
NSData *hmacSHA224 = [GMSm3Utils hmacWithData:plainData keyData:keyData keyType:GMHashType_SHA224];
NSData *hmacSHA256 = [GMSm3Utils hmacWithData:plainData keyData:keyData keyType:GMHashType_SHA256];
NSData *hmacSHA384 = [GMSm3Utils hmacWithData:plainData keyData:keyData keyType:GMHashType_SHA384];
NSData *hmacSHA512 = [GMSm3Utils hmacWithData:plainData keyData:keyData keyType:GMHashType_SHA512];
// 字符串格式输入,指定算法类型
NSString *hmacSHA512 = [GMSm3Utils hmacWithText:@"Message" keyText:@"SecretKey" keyType:GMHashType_SHA512];