iOS-密码学(一)哈希-DES、AES、RSA、md5

密码学简介:

领域 --> 军事
起源公元前 : 凯撒大帝
有一个密码本:
a -- e
b -- c
c -- z
...
美国!设备是最先进的! 截取日军的电报信息!(密文传递的) -- 破译
时间 事件(大规模的集结) 地点?AF(中途岛)
持续到 上世纪70年代 ,70 年代出现了一个特别伟大的算法叫RSA(三个人名)


1. 哈希(Hash 散列函数)

- 不可逆:密码"识别",文件"识别"
- 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
- 一个二进制数据,只有一个Hash值

注意:base64是编码格式,不是加密方式

加密方式:

  • MD5
  • SHA1
  • SHA256/512
1.1 散列函数:

特点:

  • 算法公开的.
  • 对相同的数据加密,得到的结果是一样的.
  • 对不同的数据加密,得到的结果是定长的,MD5对不同的数据进行加密,得到的结果都是32个字符.(所能标识的个数是有限的)
  • 信息摘要,信息"指纹",是用来做数据识别的.
  • 不能反算的. 指纹-->某个人:不可能
1.2 散列破解:
1.3 MD5用途
  • 密码,服务器是不需要知道用户的真实密码的!在用户注册的时候服务器就对密码进行了加密处理,然后保存在数据库!
  • 搜索
    hank ios
    ios hank
    ios - MD5 9e304d4e8df1b74cfa009913198428ab
    hank - MD5 b6dfea72ba631c88abe4a1d17114bfcf
  • 百度云&360云盘!!秒传!!服务器上只要有这个文件,那么用户可以实现秒传, (文件)MD5
  • 版权
    不同的数据 MD5 之后差别是非常大的!!
    123.png 0e6c471b5849e7a10f1a6a3172034fff
    456.png 0fea626f61419becf8005fdf942e668e

1.4 MD5 的基本安全
1.加"盐" - 早期使用!
2.HMAC,近一两年,在国内开始使用增多!
    给定一个密钥,对明文进行密钥拼接,并且做"两次散列" -> 得到32位结果!
1.5 HMAC :
- 用户在注册的那一刻,向服务器索取 密钥(key)!!
- 客户端拿到KEY的这一刻,就将KEY保存在本地!!
- 切换了新的设备(换手机登录,登录新的已有账号!) -- 重新找服务器获取!!


二、对称加密算法

2.0 可逆,传统加密算法)
2.1 加密和解密使用同一个"密钥"!!
2.2 密钥的保密工作非常重要(密钥会定期更换!密钥的管理很重要!!)

  • 经典算法
- DES   (数据加密标准:用的少,应为强度不够)
- 3DES  (使用3个密钥,对相同的数据执行三次加密,强度增加:更加用的少!)
- AES    (高级密码标准,美国国家安全局使用的,iOS系统使用的加密方式(钥匙串))!
    破解需要2000年!!
  • 对称加密算法有两种加密方式:ECB & CBC

ECB:
1.电子代码本,就是说每个代码块都是独立加密的:就是将一个数据拆分为多块,然后独立加密!
2.将8个数据块,一个个加密,然后进行拼接;一个个解密,然后拼接成完整数据!

CBC:
1.密码快链
2.后面的每个加密数据块,都与上一个数据快有关;使用一个密钥和一个"初始化向量(IV)"对数据执行进行加密
3.如果在传输数据的过程中,一个数据块被破坏了,后面所有的数据将会被破坏!那么整个数据就无法解密了!
4.向量:某个方向的数量,现代的密码学都和几何有关!因为几何(包含圆形\椭圆\球体)的变量是有规律的,但是结果是多变的!


三、非对称加密算法

RSA:是三个人(可逆,现代加密算法,效率低:因为是简单的数学计算,所以加密的效率低)
3.1 公钥和私钥(公钥也是私钥加密过的)
3.2 公钥加密,私钥解密
3.3 私钥加密,公钥解密

  • RSA 加密算法!算法是公开的!长度在200位以上的数字!

    • 找到两个最大的素数,进行最大公约-->公钥
    • 把这两个素数进行加1,再求最大公约-->私钥
    • 整个过程就是递归的运算!!
  • 用因式分解破解密码,大概需要50年!!书名《我和RSA的20年》-- 结果就是破解RSA 只能用因式分解

  • 量子计算机:很快,可以暴力破解RSA!(银行使用的多)
    百科:非对称加密算法

四、iOS终端指令:加密解密测试

/**
 *  终端测试指令 unix
 *
 *  DES(ECB)加密
 *  $ echo -n hello | openssl enc -des-ecb -K 616263 -nosalt | base64
 *
 *  DES(CBC)加密
 *  $ echo -n hello | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
 *
  *
 *  AES(ECB)加密
 *  $ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
 *
 *  AES(CBC)加密
 *  $ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
 *
 *
 *
 *  DES(ECB)解密
 *  $ echo -n HQr0Oij2kbo= | base64 -D | openssl enc -des-ecb -K 616263 -nosalt -d
 *
 *  DES(CBC)解密
 *  $ echo -n alvrvb3Gz88= | base64 -D | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -d
 *
 *
 *
 *  AES(ECB)解密
 *  $ echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d
 *
 *  AES(CBC)解密
 *  $ echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt -d
 *
 *
 *  MD5加密
 *  $ md5 -s "zm"   //md5加密 字符串
 *  $ md5 + 文件      //md5加密 文件
 *
 * 
 *
 *  提示:
 * 1> 加密过程是先加密,再base64编码
 * 2> 解密过程是先base64解码,再解密
 * 3> 加密字符串 hello,密钥abc(abc 的 ASCII可显示字符: 616263)
//输出hello 通过管道 | 到 openssl
 * 4> $ echo -n hello | openssl:    
    
//base64解码
 * 5> $ base64 -D:  

//查看文件的 ASCII可显示字符                                                  
 * 6> $ xxd + 文件名      

//生成一个密钥(私钥),名称为 private.pem                                                    
 * 7> $ openssl genrsa -out private.pem 512     

//生成一个密钥(公钥),名称为 public.pem     
 * 8> $ openssl rsa -in private.pem -out public.pem -pubout     

//查看密钥
 * 9> $ cat private.pem                                 
 * 10> $ cat public.pem
 * 11> $ openssl rsa -in private.pem -text -out private.txt     //输出私钥到 txt 文本
 * 
 * 密钥 应用场景:数字签名
 * 数据报文发送:数据报文1、数据报文2、数据报文3...
 * 客服端:1.数据报文--> HASH算法(使用md5) --> 32位字符  --> RSA加密(对md5值进行RSA公钥加密:即 数字签名)
 *        2.数据报文 + 数字签名 --> 服务器
 * 服务器:1.数据报文--> HASH算法 --> 32位字符 str1
 *        2.数字签名 --> RSA解密 --> 32位字符 str2  (利用私钥解密)
 *        3. str1 = str2 (数据没有被修改过)
 * 
 * 
 */  (md5对RSA公钥加密密文进行加密:即 数字签名)
ASCII可显示字符

网站:ASCII码对照表

终端测试
$ md5 -s "iOS"
结果:MD5 ("iOS") = 1bdf605991920db11cbdf8508204c4eb
$ md5 -s "zm"   
结果:MD5 ("zm") = d9c2967765305ff512a5ab979ed1f7a0

ASCII可显示字符.txt 内容:abcdef hk (一个txt文件的内)

$ xxd ASCII可显示字符.txt
00000000: 6162 6364 6566 2020 686b                 abcdef  hk
$ cat private.pem   //查看密钥(私钥)//base64编码的结果 512位
-----BEGIN RSA PRIVATE KEY-----
MIIBPAIBAAJBALxACyEl08USUUCdZZ0yU5SxX7frfn0OeL0RJdSV6qdvTtVrCbE0
X5AiXM/VEPEjzu+U+TOVrdN4tJNlLKTrBJUCAwEAAQJATGx7mDNxK7pp/h9oF09N
Gzp/L32NVlu/rJH/l7RdFSep4JVEo8GQ1pu5yX1TWn4q1dZSbZZXVsTblhUbxEcI
AQIhAPMHPNgiKP+4UBSqG/DEPCb/qtydvCrcqOzVn/0HorsBAiEAxkxP+VGO/wG1
rogk9a/YHQ4FFsFfJpVSHWy/TIFVLZUCIQC6JqYVS30p+uzkFzSVpEoK+TTQDcYu
8pw15J/KecnNAQIhALKm5hZU6GPOgoSvm7zNpALpMqSBqtv0A3sHEoI2syrRAiEAk5copPkLcZ3gIXAvmHGQ4euDUYpQqMCSuw5w5ZPHG5A=                
-----END RSA PRIVATE KEY----- 

$ cat public.pem    //查看密钥(公钥)//base64编码的结
-----BEGIN PUBLIC KEY----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALxACyEl08USUUCdZZ0yU5SxX7frfn0O
eL0RJdSV6qdvTtVrCbE0X5AiXM/VEPEjzu+U+TOVrdN4tJNlLKTrBJUCAwEAAQ==    果
-----END PUBLIC KEY----- <br>

苹果的p12证书,也是利用RSA创建的

  • 对称加密 数据块 的理解

abc.txt 内容1
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
32222222

abc.txt 内容2
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
32222222
  • 对以上文件 终端命令测试
$ ls
abc.txt  
// DES-ECB 加密:abc.txt 内容1
$ openssl enc -des-ecb -K 616261 -nosalt -in abc.txt -out msg1.bin
$ ls
abc.txt  msg1.bin
$ xxd msg1.bin
00000000: 380e 2176 3c39 a20f 92f3 529a 21b6 00a8  8.!v<9....R.!...
00000010: 9bbd 88d9 7b7c b950 0d3d af76 4906 1401  ....{|.P.=.vI...
00000020: 144b 6c44 776c a64c 9123 dcde 7746 be29  .KlDwl.L.#..wF.)
00000030: e000 dfb8 b989 cbf0 3452 1498 122b b918  ........4R...+..
00000040: b694 cafa 8d16 29f7 10f7 eca3 e892 8ea2  ......).........
00000050: d224 68ba d07e 6f9c fcd5 388b 2725 d408  .$h..~o...8.'%..
00000060: 682a 385e cf89 1929 2043 36f5 c7b4 2bf5  h*8^...) C6...+.
// DES-ECB 加密:abc.txt 内容2
$ openssl enc -des-ecb -K 616261 -nosalt -in abc.txt -out msg2.bin
$ xxd msg2.bin
00000000: 380e 2176 3c39 a20f 92f3 529a 21b6 00a8  8.!v<9....R.!...
00000010: 9bbd 88d9 7b7c b950 0d3d af76 4906 1401  ....{|.P.=.vI...
00000020: 144b 6c44 776c a64c 9123 dcde 7746 be29  .KlDwl.L.#..wF.)
00000030: e000 dfb8 b989 cbf0 3452 1498 122b b918  ........4R...+..
00000040: b694 cafa 8d16 29f7 10f7 eca3 e892 8ea2  ......).........
00000050: d224 68ba d07e 6f9c fcd5 388b 2725 d408  .$h..~o...8.'%..
00000060: 501b 6d91 b1dd 7a8c 2043 36f5 c7b4 2bf5  P.m...z. C6...+.
// 总结: DES-ECB 加密结果,只是一个块数据加密加过不同


// MD5 加密:abc.txt 内容1
$ md5 abc.txt
MD5 (abc.txt) = 900e09f7dcf7f72a2fdc971633c75448
// MD5 加密:abc.txt 内容2
$ md5 abc.txt
MD5 (abc.txt) = 2fe03ad66c092df04a217e6653b102ee
// MD5 加密结果:完全不一样


// DES-CBC 加密:abc.txt 内容1
$ openssl enc -des-cbc -iv 0102030405060708 -K 616261 -nosalt -in abc.txt -out msg3.bin
// DES-CBC 加密:abc.txt 内容2
$ openssl enc -des-cbc -iv 0102030405060708 -K 616261 -nosalt -in abc.txt -out msg4.bin
// DES-CBC 加密:abc.txt 内容1 结果
$ xxd msg3.bin
00000000: 4d09 2bbf f72a f997 e530 a568 3169 e7b8  M.+..*...0.h1i..
00000010: b757 b13c ea2d 33dc 4b4e 1f93 d311 735e  .W.<.-3.KN....s^
00000020: f695 6749 5189 07b9 418b 8978 4fb1 bbdd  ..gIQ...A..xO...
00000030: af8e 7f2c ab72 cc9c 87e7 cc37 f854 7dfd  ...,.r.....7.T}.
00000040: 67b7 5406 3e71 b47a aaba 119a 3d5f 374e  g.T.>q.z....=_7N
00000050: 7165 d5b8 93ea 4777 25bc 0685 1a20 2384  qe....Gw%.... #.
00000060: 5661 6e4f 1c6d 27ac 5e7f 8242 856f f472  VanO.m'.^..B.o.r
// DES-CBC 加密:abc.txt 内容2 结果
$ xxd msg4.bin
00000000: 4d09 2bbf f72a f997 e530 a568 3169 e7b8  M.+..*...0.h1i..
00000010: b757 b13c ea2d 33dc 4b4e 1f93 d311 735e  .W.<.-3.KN....s^
00000020: f695 6749 5189 07b9 418b 8978 4fb1 bbdd  ..gIQ...A..xO...
00000030: af8e 7f2c ab72 cc9c 87e7 cc37 f854 7dfd  ...,.r.....7.T}.
00000040: 67b7 5406 3e71 b47a aaba 119a 3d5f 374e  g.T.>q.z....=_7N
00000050: 7165 d5b8 93ea 4777 25bc 0685 1a20 2384  qe....Gw%.... #.
00000060: 893c afe6 01d9 a87c 5645 4959 400a 4dad  .<.....|VEIY@.M.
$
// 总结: DES-CBC 加密结果,一个数据块改变,这个数据块后面的数据块 加密结果都不同
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容