美文网首页
iOS-密码学(一)哈希-DES、AES、RSA、md5

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

作者: lukyy | 来源:发表于2018-05-16 09:36 被阅读43次

    密码学简介:

    领域 --> 军事
    起源公元前 : 凯撒大帝
    有一个密码本:
    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 加密结果,一个数据块改变,这个数据块后面的数据块 加密结果都不同
    

    相关文章

      网友评论

          本文标题:iOS-密码学(一)哈希-DES、AES、RSA、md5

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