MD5加密后的结果是由32个16进制数组成:
void LP_MD5(const char *string,CC_LONG length,unsigned char *md){ md5加密的内部实现步骤: //创建MD5方法 CC_MD5_CTX md5; //初始化 CC_MD5_init(&md5); //更新加密参数 CC_MD5_Update(&md5,string,length); //结束加密 CC_MD5_Final(md,&md5); }
以上是xcode中封装的MD5加密的具体实现,加密是用C语言写的,在iOS工程开发中,经常使用的开发环境是OC语言,那么在OC中怎么实现加密过程
-(NSString *)md5String{ unsigned char md[CC_MD5_DIGEST_LENGTH]; CC_MD5(self.UTF8String, (CC_LONG)self.length, md); //获取密文 NSMutableString *resultString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH]; for (int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) { //将加密结果的数组内容以16进制的形式拼接到可变的字符串中 [resultString appendFormat:@"%02X",md[i]]; } return resultString; }
在开发中,为了保存用户信息安全,经常使用加密方式存储用户名、密码,由于MD5的残缺性,不可逆性,能够相对安全。
在苹果系统中还有一种加密保存方式,那就是钥匙串保存,用封装的类KeychainItemWrapper实现工程中访问钥匙串,具体应用如下:
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"keyChainItem" accessGroup:nil]; //系统提供的键值对中的键,非系统的键没办法添加到字典中 id kUsernameKey = (__bridge id)kSecAttrAccount; id kPasswordKey = (__bridge id)kSecValueData; //存值 [wrapper setObject:@"user" forKey:kUsernameKey]; [wrapper setObject:@"123" forKey:kPasswordKey]; //通过相同的标记创建的钥匙串中具有相同的数据,可以看做同一个对象 KeychainItemWrapper *wrapper1 = [[KeychainItemWrapper alloc] initWithIdentifier:@"keyChainItem" accessGroup:nil]; //取值 NSString *name = [wrapper1 objectForKey:kUsernameKey]; NSLog(@"------%@",name);