iOS MD5和base64加密

作者: Joker_King | 来源:发表于2016-04-18 20:31 被阅读2920次

MD5和base64加密

在网络发展趋势日渐迅猛的今天,数据的安全性也越来越重要。因此,如何保证用户数据的安全就成为了我们不得不考虑的一个问题。在iOS中最常见的两种加密方式是base64加密码和MD5加密。base64加密属于可逆性的加密,意思就是既可以加密,也可以解密。而MD5加密属于不可逆性的加密,只能够给我们提供加密的方式,却没有解密的方式,一般情况多应用与登录注册界面。

MD5加密

MD5简介

MD5是利用哈希算法来加密的。哈希算法是一种摘要算法,从严格意义上来讲它不属于加密算法(因为它没有解密的过程),MD5有以下两个最主要的特性。

  • 加密的不可逆性,只能够加密,不能够解密。
  • 任意长度的明文经过加密后长度都是固定的,长度为16进制32位。

它还有以下几种特点

  • 容易计算:根据原数据计算出MD5很容易
  • 抗修改性:MD5对原数据十分的敏感,哪怕只修改了一个字节,得到的MD5的值与之前的MD5数值都有很大的差别。
  • 防伪性能高:已知原数据和它的MD5值,想要找到相同MD5值得数据是非常困难的,可以说几乎是不可能的。

准备工作

在我们正式使用MD5之前我们还需要做一些准备工作,首先我们需要引入<CommonCrypto/CommonCrypto.h>这个头文件。

示例代码

在这里我们将MD5加密封装在一个类中,以便于我们日后使用起来更加的方便。这里我们提供了两个类方法,分别对NSString和NSData进行加密,声明成类方法是为了调用的时候方便。

MySecurities.h 文件
#import <Foundation/Foundation.h>
@interface MySecurities : NSObject
+(NSString *)md5String:(NSString *)sourceString;//md5字符串加密
+(NSString *)md5Data:(NSData *)sourceData;//md5data加密
@end
MySecurities.h 文件 
@implementation MySecurities
+(NSString *)md5String:(NSString *)sourceString{
if(!sourceString){
return nil;//判断sourceString如果为空则直接返回nil。
}
//MD5加密都是通过C级别的函数来计算,所以需要将加密的字符串转换为C语言的字符串
 const char *cString = sourceString.UTF8String;
//创建一个C语言的字符数组,用来接收加密结束之后的字符
 unsigned char result[CC_MD5_DIGEST_LENGTH];
//MD5计算(也就是加密)
//第一个参数:需要加密的字符串
//第二个参数:需要加密的字符串的长度
//第三个参数:加密完成之后的字符串存储的地方
  CC_MD5(cString, (CC_LONG)strlen(cString), result);
//将加密完成的字符拼接起来使用(16进制的)。
//声明一个可变字符串类型,用来拼接转换好的字符
 NSMutableString *resultString = [[NSMutableString alloc]init];
//遍历所有的result数组,取出所有的字符来拼接
    for (int i = 0;i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultString  appendFormat:@"%02x",result[i]];
//%02x:x 表示以十六进制形式输出,02 表示不足两位,前面补0输出;超出两位,不影响。当x小写的时候,返回的密文中的字母就是小写的,当X大写的时候返回的密文中的字母是大写的。
    }
//打印最终需要的字符
    NSLog(@"resultString === %@",resultString);
    return resultString;
}
@end
MySecurities.h 文件 
@implementation MySecurities
+(NSString *)md5Data:(NSData *)sourceData{
    if (!sourceData) {
        return nil;//判断sourceString如果为空则直接返回nil。
    }
//需要MD5变量并且初始化
    CC_MD5_CTX  md5;
    CC_MD5_Init(&md5);
//开始加密(第一个参数:对md5变量去地址,要为该变量指向的内存空间计算好数据,第二个参数:需要计算的源数据,第三个参数:源数据的长度)
    CC_MD5_Update(&md5, sourceData.bytes, (CC_LONG)sourceData.length);
//声明一个无符号的字符数组,用来盛放转换好的数据
    unsigned char result[CC_MD5_DIGEST_LENGTH];
//将数据放入result数组
    CC_MD5_Final(result, &md5);
//将result中的字符拼接为OC语言中的字符串,以便我们使用。
    NSMutableString *resultString = [NSMutableString string];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultString appendFormat:@"%02X",result[i]];
    }
    NSLog(@"resultString=========%@",resultString);
    return  resultString;
@end

base64加密

base64简介

Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

示例代码

和MD5一样我们采取封装的办法将base64封装进了MySecurities这个类中,我们也提供了两种加密的方式

MySecurities.h 文件
#import <Foundation/Foundation.h>
@interface MySecurities : NSObject
+(NSString *)base64EncodingWithData:(NSData *)sourceData;//base64加密
+(id)base64EncodingWithString:(NSString *)sourceString;//base64解密
@end

base64加密

 MySecurities.m 文件
@implementation MySecurities
+(NSString *)base64EncodingWithData:(NSData *)sourceData{
    if (!sourceData) {//如果sourceData则返回nil,不进行加密。
        return nil;
    }
    NSString *resultString = [sourceData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    return resultString;
}
@end

base64解密

 MySecurities.m 文件
@implementation MySecurities
+(id)base64EncodingWithString:(NSString *)sourceString{
    if (!sourceString) {
        return nil;//如果sourceString则返回nil,不进行解密。
    }
    NSData *resultData = [[NSData alloc]initWithBase64EncodedString:sourceString options:NSDataBase64DecodingIgnoreUnknownCharacters];
    return resultData;
}
@end

这是我个人对着两种加密方式的一个理解,如有不同意见,或者更好的,欢迎指正。

相关文章

  • iOS 数据加密

    iOS 常用加密方式算法包括MD5加密、AES加密、BASE64加密 MD5加密 MD5:全称是Message D...

  • iOS加密

    iOS代码常见的加密方式包括MD5加密、AES加密、BASE64加密,RSA加密。 MD5加密 MD5是不可逆的只...

  • iOS 关于加密

    常见的iOS代码加密常用加密方式包括Base64加密、MD5加密、AES加密、RSA加密等。 Base64加密 B...

  • iOS代码加密常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • iOS常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • 两种加密方法

    base64和MD5加密 利用md5,和base64对应用中的敏感数据进行的加密和编码。 md5和base64的区...

  • iOS开发之系统MD5加密

    常见的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前来说一般是不可逆的。MD5生成的...

  • base64和MD5加密

    base64和MD5加密 利用md5,和base64对应用中的敏感数据进行的加密和编码。 1. md5和base6...

  • 前端js几种加密/解密方法

    一、base64加密 base64的github地址 示例 二、MD5加密(不可逆) MD5加密的github地址...

  • 玩转iOS常用加密模式

    iOS常用的加密方式 Base64加密 MD5加密 AES加密 RSA加密 直接上干货,理论性的知识,大家从网上自...

网友评论

  • Bug集:MD5的digest用base64编码 用python或者java加密出来的和iOS加密出来的字符串不一样是怎么回事,
    python代码:
    def to_md5_base64(strBody):
    hash = hashlib.md5()
    hash.update(body)
    return hash.digest().encode('base64').strip()
    iOS代码:
    const char *cString = sourceString.UTF8String;
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cString, (CC_LONG)strlen(cString), result);
    NSMutableString *resultString = [[NSMutableString alloc]init];
    for (int i = 0;i < CC_MD5_DIGEST_LENGTH; i++) {
    [resultString appendFormat:@"%02x",result[i]];
    }
    //打印最终需要的字符
    NSLog(@"resultString MD5=== %@",resultString);
    NSString *resultStringbase = [[resultString dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    NSLog(@"resultString BASE64=== %@",resultString);
  • 小糾丶羯:这个得到的是转换成16进制后的32位的结果,如何才能得到原有二进制的
    Joker_King:@小糾丶羯 你把16转成二进制不就好了。
  • 雷鸣1010:注明出处,可以转载么
    Joker_King:@雷鸣1010 可以
  • 谢谢生活:谢谢 提供
  • peaktan:如果要加密成64位呢,怎么弄 :smiley:
    Joker_King:@进化的蜗牛 只有32和16位的,不是多少位都能弄的
  • Gxpzy:16位和32位怎么弄呢
    Joker_King:@Gxpzy 默认加密是32位的,16位的是去除前8位和后8位得来的
    Gxpzy:@Joker_King 对,可以加密成16位和32位
    Joker_King:@Gxpzy 你是要把他加密成16位的吗
  • 无夜之星辰:可以,很强势。

本文标题:iOS MD5和base64加密

本文链接:https://www.haomeiwen.com/subject/oxyalttx.html