zoukankan      html  css  js  c++  java
  • iOS开发日记8-MD5加密

    今天博主有一个密码加密的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步.

    MD5加密和SHA-1加密是计算机世界非常重要的两种加密算法.MD5加密通常用于对NSString的加密,而SHA-1加密通常用于对URL的加密,今天和大家重点分享一下MD5加密的方法.

    使用MD5加密,我们需要给NSString增加一个类别,并导入<CommonCrypto/CommonDigest.h>头文件.

    .h中的内容:

    #import <Foundation/Foundation.h>

    #import <CommonCrypto/CommonDigest.h>

    @interface NSString (MD5encrypt)

    -(NSString *) md5HexDigest;

    @end

     .m中的内容:

    #import "NSString+MD5encrypt.h"

    @implementation NSString (MD5encrypt)

    -(NSString *) md5HexDigest

    {

        const char *original_str = [self UTF8String];

        unsigned char result[CC_MD5_DIGEST_LENGTH];

        // CC_MD5(original_str, strlen(original_str), result); 这里的用法明显是错误的,当original_str中包含空字符()时

        CC_MD5(original_str, (unsigned int)self.length, result);

        NSMutableString *hash = [NSMutableString string];

        for (int i = 0; i < 16; i++)

            [hash appendFormat:@"%02X", result[i]];

        return [hash lowercaseString];

    }

    @end

    现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度:

    1.加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5

    2.先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序

    总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文.

    /**
     *  直接用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]; NSString *header = [anwen substringToIndex:2]; NSString *footer = [anwen substringFromIndex:2]; anwen = [footer stringByAppendingString:header]; NSLog(@"%@ - %@", str, anwen); return anwen; }
  • 相关阅读:
    Callable的Future模式
    并发队列
    并发工具类和线程池
    安全与死锁问题
    ConcurrentHashMap底层实现
    Map集合常见面试题
    List集合框架
    类加载器
    Activiti中个人任务分配
    流程定义
  • 原文地址:https://www.cnblogs.com/Twisted-Fate/p/4748216.html
Copyright © 2011-2022 走看看