• ios常见加密解密算法介绍与应用


    常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密。

     转自:http://www.finalshares.com/3g-read-run?tid=86

    MD5

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3MD4

    MD5算法具有以下特点:

    1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

    2、容易计算:从原数据计算出MD5值很容易。

    3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

    4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

    5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

    MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

     

     

    一致性验证

     

    MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515,这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。

    安全访问认证

    MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等 诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行 MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可 以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的“字节串”映射为一个128bit的大整数,并且 是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说, 是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

    数字签名

     

    MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹), 以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内 容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的 数字签名应用。

     

     

    代码示例:

     

     

     

     

     

     

     

     

     

     

    1. MD5 iOS代码加密创建MD5类,代码如下
      复制代码
      1
      2
      3
      4
      5
      #import <Foundation/Foundation.h>
                   
      @interface CJMD5 : NSObject
      +(NSString *)md5HexDigest:(NSString *)input;
      @end

    2. 复制代码
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      #import "CJMD5.h"
      #import <CommonCrypto/CommonDigest.h>
                   
      @implementation CJMD5
      +(NSString *)md5HexDigest:(NSString *)input{   
          const char* str = [input UTF8String];   
          unsigned char result[CC_MD5_DIGEST_LENGTH];
          CC_MD5(str, strlen(str), result);   
          NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
          for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
              [ret appendFormat:@"%02X",result<i>];   
          }
               
          return ret;
      }
      @end</i>

    3. 复制代码
      1
      2
      3
      4
      NSString *userName = @"cerastes";
      NSString *password = @"hello Word";//   MD5加密
      NSString *md5 = [CJMD5 md5HexDigest:password];
      NSLog(@"%@",md5);

    AES

     


    复制代码

    1
    NSString *encryptedData = [AESCrypt encrypt:userName password:password];//加密

    NSString *message = [AESCrypt decrypt:encryptedData password:password]; //解密

    NSLog(@"加密结果 = %@",encryptedData);

    NSLog(@"解密结果 = %@",message);

     

     

     

     

     

    BASE64

     

    BASE64加密iOS代码加密添加如下方法

    .h文件定义

    复制代码
    1
    2
    3
    4
    + (NSString*)encodeBase64String:(NSString *)input;
    + (NSString*)decodeBase64String:(NSString *)input;
    + (NSString*)encodeBase64Data:(NSData *)data;
    + (NSString*)decodeBase64Data:(NSData *)data;
    .m文件

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    + (NSString*)encodeBase64String:(NSString * )input {
        NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
        data = [GTMBase64 encodeData:data];
        NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        return base64String;
    }
    + (NSString*)decodeBase64String:(NSString * )input {
        NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
        data = [GTMBase64 decodeData:data];
        NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        return base64String;
    }
    + (NSString*)encodeBase64Data:(NSData *)data {
        data = [GTMBase64 encodeData:data];
        NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        return base64String;
    }
    + (NSString*)decodeBase64Data:(NSData *)data {
        data = [GTMBase64 decodeData:data];
        NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        return base64String;
    }

     

     

    使用:

     

     


    复制代码

    1
    2
    3
    4
    5
    <i>//    BASE64加密
    NSString *baseEncodeString = [GTMBase64 encodeBase64String:password];   
    NSString *baseDecodeString = [GTMBase64 decodeBase64String:baseEncodeString];
    NSLog(@"baseEncodeString = %@",baseEncodeString);   
    NSLog(@"baseDecodeString = %@",baseDecodeString);</i>

    iOS应用代码加密

    1. 除了以上的三种算法的iOS代码加密之外,iOS应用代码加密也是非常重要的,这里就不贴代码了,主要的iOS代码加密方式如下,iOS应用代码加密是爱加密平台提供的专业的iOS加密服务。

    2. 该工具可以加密角度:
      • 本地数据加密对NSUserDefaults,sqlite存储文件数据加密,保护帐号和关键信息。
      • URL编码加密对程序中出现的URL进行编码加密,防止URL被静态分析
      • 网络传输数据加密对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取
      • 方法体,方法名高级混淆对应用程序的方法名和方法体进行混淆,保证源码被逆向后无法解析代码
      • 程序结构混排加密对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低
  • 相关阅读:
    Post和Get的区别(兼谈页面间传值的方式)
    ClickOnce部署Winform程序的方方面面
    TSQL查询进阶深入浅出视图
    一个java volatile测试揭开的陷阱
    java volatile的一个验证反例
    [Swing扩展组件分享]为JTable添加选择列(CheckBox)的包装类
    JTextField限制输入长度的完美解决方案
    swing程序的关闭机制看好你的swing.Timer,别让它成为程序不能退出的原凶
    举例理解单元测试
    打印出txt中出现频率最高的十个词——软件工程个人项目C语言
  • 原文地址:https://www.cnblogs.com/superbobo/p/5252965.html
Copyright © 2020-2023  润新知