31.MD5加密

先说一下:MD5加密可破解,每一个原密码对应一个不变的MD5加密的密码
效果:

MD5加密demo 密码: c1j2

MD5加密

一.简述MD5:

  • 1.MD5即Message-Digest Algorithm 5,用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。(引用自百度百科)

  • 2.MD5 不是一种加密算法,只是用来做文件校验的。比如官方发布一个软件,同时公布一个MD5校验码。如果你下载下来的软件,通过MD5校验后,和官方公布的不同,就说明你这个软件已经被人修改过了,不是官方原版。MD5算法都是统一的,没有密钥之类的东西。相同的字符串通过MD5转码后,都能够获得相同的MD5码。但是,MD5是一种摘要算法,是不可逆的,但是网上在线可以解密,也就是说,通过MD5值不能还原原始数据。加密,解密之类的还是用DES/AES + BASE64之类的算法来实现。

二.MD5的用法

  • 1.在Objective-C中我们怎么进行MD5加密,首先我们需要包含头文件是

    #import <CommonCrypto/CommonDigest.h>
    

digest [daɪ'dʒɛst] vt. 消化;吸收;融会贯通
crypto ['kriptəu] adj. 秘密的,隐蔽的,不公开的

  • 2.其实用法跟简单,就一个调用方法(两种方法)
    1.第一种
    [self md5:@"要加密的东西" ]; //可以打印出来就是加密好的字符串,可以在线解密
    - (NSString *)md5:(NSString *)str
    {
    const char *cStr = [str UTF8String];
    unsigned char result[16];
    CC_MD5(cStr, (CC_LONG)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]
    ];
    }

    2.第二种

    - (NSString *)md5HexDigest:(NSString*)password
     {
      const char *original_str = [password UTF8String];
      unsigned char result[CC_MD5_DIGEST_LENGTH];
      CC_MD5(original_str, strlen(original_str), result);
      NSMutableString *hash = [NSMutableString string];
     for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
     {
         /*
          %02X是格式控制符:‘x’表示以16进制输出,‘02’表示不足两位,前面补0;
         */
         [hash appendFormat:@"%02X", result[i]];
     }
      NSString *mdfiveString = [hash lowercaseString];
      return mdfiveString;
    }
    

1.char[16]和%02x的来历:
其中%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,正好是转换的正确结果。(摘抄)
2.对于16位MD5加密的解释


至于人们说的16位MD5加密,其实是这样的:举例如果产生的MD5加密字符串是:01234567abcdefababcdefab76543210,则16位的MD加密字符是abcdefababcdefab,也就是只是截取了中间的16位。实际上这个操作已经不是MD5加密算法所包括的,而应当是对MD5加密算法结果的二次处理。其它的64位和大小写什么的,都属于对MD5算法结果的二次处理。因为MD5算法产生的结果就是128bit,128个二进制数字。

三.简单介绍一下加密

 *
  1、简单的概念

    明文:加密前的信息
    密文:机密后的信息
    加密算法:加密或解密的算法
    密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao)
 *
     简单的例子

     将123456每位数字都加1后得到234567,
     其中123456就是明文,234567就是密文,加密密钥就是1,加密算法是每位加

 * 2、加密算法种类
     按照加密的方式我们可以将加密算法大体分成一下三种:
 *      对称加密算法(加密和解密算法是对称的可能有点抽象你可以理解成同一把钥匙)
 *      非对称加密算法(加密和解密算法是非对称的可以理解成加密的时候是一把钥匙解密的时候是一把钥匙,典型的就是rsa公钥和私钥)
 *      经典哈希算法(哈希算法是一种散列算法,有个特殊性是它是不可逆只能通过穷举法超大量的计算才可能算出,一般几率很小,还有就是你同一段的明文两次加密出来的结果是不一样的)
 *
 * 3、算法举例
 *    对称加密算法:DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法,AES算法。
 *    非对称加密算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC。
 *    经典的哈希算法:MD2、MD4、MD5 和 *       
 *    SHA-1(目的是将任意长输入通过算法变为固定长输出,且保证输入变化一点输出都不同,且不能反向解密)
 * 4、 今天我们来说一下我们在来发中常用的算法暂时只讲:MD5、Base64、sha、AES、rsa
 *    补充:RSA加密算法中比较重要的加密算法
 *    非对称加密算法可能是世界上最重要的算法,它是当今电子商务等领域的基石。简而言之,非对称加密就是指加密公钥和解密密钥是不同的,而且加密公钥和解密密钥是成对出现。非对称加密又叫公钥加密,也就是说成对的密钥,其中一个是对外公开的,所有人都可以获得,人们称之为公钥;而与之相对应的称为私钥,只有这对密钥的生成者才能拥有。
 *    对于一个私钥,有且只有一个与之对应的公钥。公钥公开给任何人,私钥通常是只有生成者拥有。公/私钥通常是1024位或者2048位,越长安全系数越高,但是解密越困难。尽管拿到了公钥,如果没有私钥,要想解密那几乎是不可能的,至少现在在世界上还没有人公开出来说成功解密的。
 * 5. 先移动端给服务器传递通过RSA公钥加密后的数据,参数包括DES的密钥(密钥是随机生成的八位字符串) 和 相关参数信息,服务器通过私钥解密信息数据,里面包括DES密钥和 相关参数信息,服务器再通过此DES密钥加密返回数据给移动端,移动端通过此DES密钥进行解密获取数据。
 *    优点:因为RSA不容易解密,即使被拦截解密了,获取了DES的密钥,因为DES的密钥是随机生成的,也只能解密这一次的数据信息,不会对其他数据信息产生影响。(注:DES的密钥每一次都要重新随机生成,也就是一个密钥只完成这一次的数据传递)
 *    总结:公钥和密钥成对出现,其中公钥负责加密 ,私钥负责解密
 *
 */

四.在线的加密和解密

其他博客

记得点喜欢哦!!!嘿嘿

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 2,912评论 0 7
  • 常见的加密算法 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ D...
    小小啄阅读 3,093评论 0 9
  • 首先罗列一些知识点: 1.加密算法通常分为对称性加密算法和非对称性加密算法:对于对称性加密算法,信息接收双方都需事...
    JonesCxy阅读 1,371评论 2 4
  • 软件开发过程中,对数据进行加密是保证数据安全的重要手段,常见的加密有Base64加密和MD5加密。Base64加密...
    Billy_W阅读 1,794评论 0 0
  • MD5和base64加密 在网络发展趋势日渐迅猛的今天,数据的安全性也越来越重要。因此,如何保证用户数据的安全就成...
    Joker_King阅读 5,907评论 11 28