iOS中加密的使用
2016-04-24 13:18
465 查看
一.对称算法:(可逆算法)
加密使用相同的秘钥,速度快,适合大数据加密,DES,AES;
二.非对称算法:(可逆算法)
公钥加密,私钥解密;或者,私钥加密,公钥解密,速度慢,适合小数据加密,RSA;
三.普遍的加密方法:
公钥给对称加密的密钥加密,私钥解密.(先用RSA加密AES的密钥)
四.散列算法:(摘取一部分信息加密)(不可逆加密)
MD5,SHA1,SHA256,SHA512;
MD5 算法:对任意的数据源计算,生成固定长度的字符串,32个字符,
终端中测试:MD5 -s"admin"
MD5应用: 验证从网络下载的文件是否被修改过.
SSKeyChain框架:对称加密框架,把钥匙串保存到本地:
保存:[SSKeyChain setPassword: 要保存的密码 forService: [NSBundle mainBUndle].identifier]指定唯一标示 account:指定账号]
读取:[SSkeyChain passwordForService: 唯一标示 account:指定账号]
一,base64 加密解密
#pragma mark base64"加密"
/加密界面都是对二进制进行处理
NSData *data = [stringdataUsingEncoding:NSUTF8StringEncoding];
//指定编码方式.默认0
NSString *base64String= [database64EncodedStringWithOptions:0];
//解密
//二进制
NSData *data = [[NSDataalloc]initWithBase64EncodedString:base64Stringoptions:0];
[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
二,MD5(导入算法文件)
#import <Foundation/Foundation.h>
@interface NSString (Hash)
#pragma mark - 散列函数
/**
* 计算MD5散列结果
*
* 终端测试命令:
* @code
* md5 -s "string"
* @endcode
*
* <p>提示:随着 MD5碰撞生成器的出现,MD5算法不应被用于任何软件完整性检查或代码签名的用途。<p>
*
* @return 32个字符的MD5散列字符串
*/
- (NSString *)md5String;
/**
* 计算SHA1散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha1
* @endcode
*
* @return 40个字符的SHA1散列字符串
*/
- (NSString *)sha1String;
/**
* 计算SHA256散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha256
* @endcode
*
* @return 64个字符的SHA256散列字符串
*/
- (NSString *)sha256String;
/**
* 计算SHA 512散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha512
* @endcode
*
* @return 128个字符的SHA 512散列字符串
*/
- (NSString *)sha512String;
#pragma mark - HMAC 散列函数
/**
* 计算HMAC MD5散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl dgst -md5 -hmac "key"
* @endcode
*
* @return 32个字符的HMAC MD5散列字符串
*/
- (NSString *)hmacMD5StringWithKey:(NSString *)key;
/**
* 计算HMAC SHA1散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha1 -hmac "key"
* @endcode
*
* @return 40个字符的HMAC SHA1散列字符串
*/
- (NSString *)hmacSHA1StringWithKey:(NSString *)key;
/**
* 计算HMAC SHA256散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha256 -hmac "key"
* @endcode
*
* @return 64个字符的HMAC SHA256散列字符串
*/
- (NSString *)hmacSHA256StringWithKey:(NSString *)key;
/**
* 计算HMAC SHA512散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha512 -hmac "key"
* @endcode
*
* @return 128个字符的HMAC SHA512散列字符串
*/
- (NSString *)hmacSHA512StringWithKey:(NSString *)key;
#pragma mark - 文件散列函数
/**
* 计算文件的MD5散列结果
*
* 终端测试命令:
* @code
* md5 file.dat
* @endcode
*
* @return 32个字符的MD5散列字符串
*/
- (NSString *)fileMD5Hash;
/**
* 计算文件的SHA1散列结果
*
* 终端测试命令:
* @code
* openssl sha -sha1 file.dat
* @endcode
*
* @return 40个字符的SHA1散列字符串
*/
- (NSString *)fileSHA1Hash;
/**
* 计算文件的SHA256散列结果
*
* 终端测试命令:
* @code
* openssl sha -sha256 file.dat
* @endcode
*
* @return 64个字符的SHA256散列字符串
*/
- (NSString *)fileSHA256Hash;
/**
* 计算文件的SHA512散列结果
*
* 终端测试命令:
* @code
* openssl sha -sha512 file.dat
* @endcode
*
* @return 128个字符的SHA512散列字符串
*/
- (NSString *)fileSHA512Hash;
@end
#import "NSString+Hash.h"
#import <CommonCrypto/CommonCrypto.h>
@implementation NSString (Hash)
#pragma mark - 散列函数
- (NSString *)md5String {
const char *str =self.UTF8String;
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
- (NSString *)sha1String {
const char *str =self.UTF8String;
uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA1_DIGEST_LENGTH];
}
- (NSString *)sha256String {
const char *str =self.UTF8String;
uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA256_DIGEST_LENGTH];
}
- (NSString *)sha512String {
const char *str =self.UTF8String;
uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA512_DIGEST_LENGTH];
}
#pragma mark - HMAC 散列函数
- (NSString *)hmacMD5StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CCHmac(kCCHmacAlgMD5, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
- (NSString *)hmacSHA1StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA1_DIGEST_LENGTH];
}
- (NSString *)hmacSHA256StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA256_DIGEST_LENGTH];
}
- (NSString *)hmacSHA512StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA512, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA512_DIGEST_LENGTH];
}
#pragma mark - 文件散列函数
#define FileHashDefaultChunkSizeForReadingData 4096
- (NSString *)fileMD5Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_MD5_CTX hashCtx;
CC_MD5_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_MD5_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
- (NSString *)fileSHA1Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_SHA1_CTX hashCtx;
CC_SHA1_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_SHA1_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
CC_SHA1_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_SHA1_DIGEST_LENGTH];
}
- (NSString *)fileSHA256Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_SHA256_CTX hashCtx;
CC_SHA256_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_SHA256_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
CC_SHA256_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_SHA256_DIGEST_LENGTH];
}
- (NSString *)fileSHA512Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_SHA512_CTX hashCtx;
CC_SHA512_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_SHA512_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
CC_SHA512_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_SHA512_DIGEST_LENGTH];
}
#pragma mark - 助手方法
/**
* 返回二进制 Bytes流的字符串表示形式
*
* @param bytes 二进制 Bytes数组
* @param length 数组长度
*
* @return 字符串表示形式
*/
- (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length {
NSMutableString *strM = [NSMutableStringstring];
for (int i =0; i < length; i++) {
[strM appendFormat:@"%02x", bytes[i]];
}
return [strM copy];
}
1 使用md5对密码加密
pwd = [pwd md5String];
2 加盐 原密码 + 一个字符串----MD5加密1
pwd = [[pwd stringByAppendingString:@"123abcABC!@##$%$%^!!@Aasdas"] md5String];
3 HMAC a.原密码 + 一个字符串----MD5加密1 ;
b. MD5加密1 + 原密码 -----MD5加密2;
pwd = [pwd hmacMD5StringWithKey:@"abc123"];
4 获取pwd + time的一个密码
- (NSString *)getPWD:(NSString *)pwd {
// 1 一个字符串key md5计算
NSString *md5Key = [@"itcast"md5String];
// 2 把原密码和之前生成的md5值再进行hmac加密
NSString *hmacKey = [pwd
hmacMD5StringWithKey:md5Key];
// 3 从服务器获取当前时间到分钟的字符串
NSURL *url = [NSURLURLWithString:@"http://127.0.0.1/php/hmackey.php"];
NSData *data = [NSDatadataWithContentsOfURL:url];
//JSON的反序列化
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:dataoptions:0error:NULL];
NSString *time = dic[@"key"];
// 4 第二步产生的hmac值+时间 和第一步产生的md5值进行hmac加密
return [[hmacKey
stringByAppendingString:time] hmacMD5StringWithKey:md5Key];
加密使用相同的秘钥,速度快,适合大数据加密,DES,AES;
二.非对称算法:(可逆算法)
公钥加密,私钥解密;或者,私钥加密,公钥解密,速度慢,适合小数据加密,RSA;
三.普遍的加密方法:
公钥给对称加密的密钥加密,私钥解密.(先用RSA加密AES的密钥)
四.散列算法:(摘取一部分信息加密)(不可逆加密)
MD5,SHA1,SHA256,SHA512;
MD5 算法:对任意的数据源计算,生成固定长度的字符串,32个字符,
终端中测试:MD5 -s"admin"
MD5应用: 验证从网络下载的文件是否被修改过.
SSKeyChain框架:对称加密框架,把钥匙串保存到本地:
保存:[SSKeyChain setPassword: 要保存的密码 forService: [NSBundle mainBUndle].identifier]指定唯一标示 account:指定账号]
读取:[SSkeyChain passwordForService: 唯一标示 account:指定账号]
一,base64 加密解密
#pragma mark base64"加密"
/加密界面都是对二进制进行处理
NSData *data = [stringdataUsingEncoding:NSUTF8StringEncoding];
//指定编码方式.默认0
NSString *base64String= [database64EncodedStringWithOptions:0];
//解密
//二进制
NSData *data = [[NSDataalloc]initWithBase64EncodedString:base64Stringoptions:0];
[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
二,MD5(导入算法文件)
#import <Foundation/Foundation.h>
@interface NSString (Hash)
#pragma mark - 散列函数
/**
* 计算MD5散列结果
*
* 终端测试命令:
* @code
* md5 -s "string"
* @endcode
*
* <p>提示:随着 MD5碰撞生成器的出现,MD5算法不应被用于任何软件完整性检查或代码签名的用途。<p>
*
* @return 32个字符的MD5散列字符串
*/
- (NSString *)md5String;
/**
* 计算SHA1散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha1
* @endcode
*
* @return 40个字符的SHA1散列字符串
*/
- (NSString *)sha1String;
/**
* 计算SHA256散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha256
* @endcode
*
* @return 64个字符的SHA256散列字符串
*/
- (NSString *)sha256String;
/**
* 计算SHA 512散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha512
* @endcode
*
* @return 128个字符的SHA 512散列字符串
*/
- (NSString *)sha512String;
#pragma mark - HMAC 散列函数
/**
* 计算HMAC MD5散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl dgst -md5 -hmac "key"
* @endcode
*
* @return 32个字符的HMAC MD5散列字符串
*/
- (NSString *)hmacMD5StringWithKey:(NSString *)key;
/**
* 计算HMAC SHA1散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha1 -hmac "key"
* @endcode
*
* @return 40个字符的HMAC SHA1散列字符串
*/
- (NSString *)hmacSHA1StringWithKey:(NSString *)key;
/**
* 计算HMAC SHA256散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha256 -hmac "key"
* @endcode
*
* @return 64个字符的HMAC SHA256散列字符串
*/
- (NSString *)hmacSHA256StringWithKey:(NSString *)key;
/**
* 计算HMAC SHA512散列结果
*
* 终端测试命令:
* @code
* echo -n "string" | openssl sha -sha512 -hmac "key"
* @endcode
*
* @return 128个字符的HMAC SHA512散列字符串
*/
- (NSString *)hmacSHA512StringWithKey:(NSString *)key;
#pragma mark - 文件散列函数
/**
* 计算文件的MD5散列结果
*
* 终端测试命令:
* @code
* md5 file.dat
* @endcode
*
* @return 32个字符的MD5散列字符串
*/
- (NSString *)fileMD5Hash;
/**
* 计算文件的SHA1散列结果
*
* 终端测试命令:
* @code
* openssl sha -sha1 file.dat
* @endcode
*
* @return 40个字符的SHA1散列字符串
*/
- (NSString *)fileSHA1Hash;
/**
* 计算文件的SHA256散列结果
*
* 终端测试命令:
* @code
* openssl sha -sha256 file.dat
* @endcode
*
* @return 64个字符的SHA256散列字符串
*/
- (NSString *)fileSHA256Hash;
/**
* 计算文件的SHA512散列结果
*
* 终端测试命令:
* @code
* openssl sha -sha512 file.dat
* @endcode
*
* @return 128个字符的SHA512散列字符串
*/
- (NSString *)fileSHA512Hash;
@end
#import "NSString+Hash.h"
#import <CommonCrypto/CommonCrypto.h>
@implementation NSString (Hash)
#pragma mark - 散列函数
- (NSString *)md5String {
const char *str =self.UTF8String;
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
- (NSString *)sha1String {
const char *str =self.UTF8String;
uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA1_DIGEST_LENGTH];
}
- (NSString *)sha256String {
const char *str =self.UTF8String;
uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA256_DIGEST_LENGTH];
}
- (NSString *)sha512String {
const char *str =self.UTF8String;
uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(str, (CC_LONG)strlen(str), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA512_DIGEST_LENGTH];
}
#pragma mark - HMAC 散列函数
- (NSString *)hmacMD5StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CCHmac(kCCHmacAlgMD5, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
- (NSString *)hmacSHA1StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA1_DIGEST_LENGTH];
}
- (NSString *)hmacSHA256StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA256_DIGEST_LENGTH];
}
- (NSString *)hmacSHA512StringWithKey:(NSString *)key {
const char *keyData = key.UTF8String;
const char *strData =self.UTF8String;
uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA512, keyData,strlen(keyData), strData,strlen(strData), buffer);
return [selfstringFromBytes:bufferlength:CC_SHA512_DIGEST_LENGTH];
}
#pragma mark - 文件散列函数
#define FileHashDefaultChunkSizeForReadingData 4096
- (NSString *)fileMD5Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_MD5_CTX hashCtx;
CC_MD5_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_MD5_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];
}
- (NSString *)fileSHA1Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_SHA1_CTX hashCtx;
CC_SHA1_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_SHA1_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
CC_SHA1_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_SHA1_DIGEST_LENGTH];
}
- (NSString *)fileSHA256Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_SHA256_CTX hashCtx;
CC_SHA256_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_SHA256_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
CC_SHA256_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_SHA256_DIGEST_LENGTH];
}
- (NSString *)fileSHA512Hash {
NSFileHandle *fp = [NSFileHandlefileHandleForReadingAtPath:self];
if (fp == nil) {
return nil;
}
CC_SHA512_CTX hashCtx;
CC_SHA512_Init(&hashCtx);
while (YES) {
@autoreleasepool {
NSData *data = [fpreadDataOfLength:FileHashDefaultChunkSizeForReadingData];
CC_SHA512_Update(&hashCtx, data.bytes, (CC_LONG)data.length);
if (data.length ==0) {
break;
}
}
}
[fp closeFile];
uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
CC_SHA512_Final(buffer, &hashCtx);
return [selfstringFromBytes:bufferlength:CC_SHA512_DIGEST_LENGTH];
}
#pragma mark - 助手方法
/**
* 返回二进制 Bytes流的字符串表示形式
*
* @param bytes 二进制 Bytes数组
* @param length 数组长度
*
* @return 字符串表示形式
*/
- (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length {
NSMutableString *strM = [NSMutableStringstring];
for (int i =0; i < length; i++) {
[strM appendFormat:@"%02x", bytes[i]];
}
return [strM copy];
}
1 使用md5对密码加密
pwd = [pwd md5String];
2 加盐 原密码 + 一个字符串----MD5加密1
pwd = [[pwd stringByAppendingString:@"123abcABC!@##$%$%^!!@Aasdas"] md5String];
3 HMAC a.原密码 + 一个字符串----MD5加密1 ;
b. MD5加密1 + 原密码 -----MD5加密2;
pwd = [pwd hmacMD5StringWithKey:@"abc123"];
4 获取pwd + time的一个密码
- (NSString *)getPWD:(NSString *)pwd {
// 1 一个字符串key md5计算
NSString *md5Key = [@"itcast"md5String];
// 2 把原密码和之前生成的md5值再进行hmac加密
NSString *hmacKey = [pwd
hmacMD5StringWithKey:md5Key];
// 3 从服务器获取当前时间到分钟的字符串
NSURL *url = [NSURLURLWithString:@"http://127.0.0.1/php/hmackey.php"];
NSData *data = [NSDatadataWithContentsOfURL:url];
//JSON的反序列化
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:dataoptions:0error:NULL];
NSString *time = dic[@"key"];
// 4 第二步产生的hmac值+时间 和第一步产生的md5值进行hmac加密
return [[hmacKey
stringByAppendingString:time] hmacMD5StringWithKey:md5Key];
相关文章推荐
- 简评搜狗输入法(ios端)
- ios 之dealloc
- iOS-setNeedsLayout等布局方法
- IOS设计模式之迭代器模式
- IOS 开发23种设计模式
- iOS - 类扩展与分类的区别
- iOS9适配(包括APNs)的改变
- IOS设计模式之组合设计模式
- ios8新特性 push kit
- iOS TableView分割线左边少一截问题
- IOS开发—keychain
- IOS设计模式之观察者模式
- IOS设计模式之中介者模式
- iOS学习笔记之手动内存管理(一)
- iOS之PCH文件
- iOS开发证书"此证书的签发者无效"解决方法
- iOS 图片背景模糊效果
- iOS开发--使用NSMutableAttributedString 实现富文本
- iOS开发框架
- ios kaifa