iOS 中的加密方式
来源:互联网 发布:java架构师视频教程 编辑:程序博客网 时间:2024/05/16 17:37
1 说明
在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题。
2.常见的加密算法
MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES
3.加密方式介绍
(1)MD5
1.简单说明
MD5:全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
效果:对输入信息生成唯一的128位散列值(32个字符)
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
2.MD5的特点
(1)输入两个不同的明文不会得到相同的输出值
(2)根据输出值,不能得到原始的明文,即其过程不可逆
3.MD5的应用
由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用
主要运用在数字签名、文件完整性验证以及口令加密等方面
MD5代码实现:
#import <CommonCrypto/CommonDigest.h>- (NSString *)md5:(NSString *)str{ const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5(cStr, strlen(cStr), result); // This is the md5 call return [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ];}
其中%02x是格式控制符:‘x’表示以16进制输出,‘02’表示不足两位,前面补0;如‘f’输出为0f,‘1f3’则输出1f3;本来一般的都会介绍到这里就完了,我想多介绍一下代码中result是个字符数组,那为什么是[16]呢,这是因为MD5算法最后生成的是128位,而在计算机的最小存储单位为字节,1个字节是8位,对应一个char类型,计算可得需要16个char。所以result是[16]。那么为什么输出的格式一定是%02x呢,而不是其它呢。这也是有原因的:因为约定MD5一般是以16进制的格式输出,那么其实这个问题就转换为把128个0和1以16进制来表示,每4位二进制对应一个16进制的元素,则需要32个16进制的元素,如果元素全部为0,放到char的数组中,正常是不会输出,如00001111,以%x输出,则是f,那么就会丢失0;但如果以%02x表示则输出结果是0f,正好是转换的正确结果。
至于人们说的16位MD5加密,其实是这样的:举例如果产生的MD5加密字符串是:01234567abcdefababcdefab76543210,则16位的MD加密字符是abcdefababcdefab,也就是只是截取了中间的16位。实际上这个操作已经不是MD5加密算法所包括的,而应当是对MD5加密算法结果的二次处理。其它的64位和大小写什么的,都属于对MD5算法结果的二次处理。因为MD5算法产生的结果就是128bit,128个二进制数字。
3.MD5改进
现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度
加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文
#import "HMViewController.h"#import "NSString+Hash.h"#define Salt @"fsdhjkfhjksdhjkfjhkd546783765"@interface HMViewController ()@end@implementation HMViewController- (void)viewDidLoad{ [super viewDidLoad]; [self digest:@"123"]; // [self digest:@"abc"]; [self digest:@"456"];}/** * 直接用MD5加密 */- (NSString *)digest:(NSString *)str{ NSString *anwen = [str md5String]; NSLog(@"%@ - %@", str, anwen); return anwen;}/** * 加盐 */- (NSString *)digest2:(NSString *)str{ str = [str stringByAppendingString:Salt]; NSString *anwen = [str md5String]; NSLog(@"%@ - %@", str, anwen); return anwen;}/** * 多次MD5 */- (NSString *)digest3:(NSString *)str{ NSString *anwen = [str md5String]; anwen = [anwen md5String]; NSLog(@"%@ - %@", str, anwen); return anwen;}/** * 先加密, 后乱序 */- (NSString *)digest4:(NSString *)str{ NSString *anwen = [str md5String]; // 注册: 123 ---- 2CB962AC59075B964B07152D234B7020 // 登录: 123 --- 202CB962AC59075B964B07152D234B70 NSString *header = [anwen substringToIndex:2]; NSString *footer = [anwen substringFromIndex:2]; anwen = [footer stringByAppendingString:header]; NSLog(@"%@ - %@", str, anwen); return anwen;}@end
(1)直接使用MD5加密(去MD5解密网站即可破解)
(2)使用加盐(通过MD5解密之后,很容易发现规律)
(3)多次MD5加密(使用MD5解密之后,发现还是密文,那就接着MD5解密)
(4)先加密,后乱序(破解难度增加)
MD5破解网站 : http://www.cmd5.com/
- iOS 中的加密方式
- IOS加密方式
- iOS常见加密方式
- 96-iOS中的加密
- iOS中的加密:MD5
- iOS代码加密常用加密方式
- iOS代码加密常用加密方式
- IOS常见的加密方式
- iOS常用的加密方式
- ios加密、编码方式汇总
- iOS开发各种加密方式
- iOS加密方式(RSA签名加密、AES加密等)
- 聊聊iOS中的网络加密
- iOS中的Base64加密解密
- iOS中的加密技术解析
- iOS中的MD5加密方法
- ios中的布局方式
- iOS 中的通信方式
- 大数据可视化的最新动态
- NewtonSoft.JSON.dll LitJson.dll
- 百度霸屏截流量抢粉丝技术 没点儿行动力千万别点击
- 函数
- arm程序的反汇编程序 试读
- iOS 中的加密方式
- 15章上机练习1
- tensorflow(四)caffe-tensorflow学习记录
- ImageView是如何使用的
- RequireJs入门
- 基于Redux的ReactNative项目开发总结(二)
- /dev/tty /dev/ttyn(0-n) /dev/console区别
- fixed和setprecision等C++格式控制的函数使用
- 检测手机是否开启模拟位置