加密方法初解

lock

前言:
依旧是可以说很良心了,今天了解了一下加密,才发现其中内容真的多,涉及具体的需求
一般常用MD5,再进一步就是加盐,再进一步就是乱序,再再进一步就是HMAC

@非对称加密算法


RSA - 加密算法
  • 公钥加密-私钥解密
  • 私钥加密-公钥加密
  • KEY-其实就是一个数字
  • 只能通过因式分解破解

哈希(散列)函数
  • MD5
  • SHA1
  • SHA256/512

@对称加密算法

  • DES
  • 3DES
  • AES(高级密码标准,美国国家安全局使用,iOS操作系统内部使用)

散列函数-特点

  • 算法公开
  • 对相同数据加密,得到的结果是一样的
  • 对于不同的数据加密,得到的结果都是定长的(32位字符a--z,0--9)
  • 信息摘要--信息指纹,用来做识别
  • 不能反算!

散列函数-用途

  • 用户登录 : 服务器里存储的是加密后的密码,并不是明文密码,用户登录时,我们客户端也只是发送加密后的识别码
  • 搜索
  • 版权

散列函数-破解

  • 目前破解的散列只有 MD5,SHA1 也在边缘
  • 散列碰撞,不同的数据使用MD5之后,能够得到相同结果的散列结果,这个网站,目前95%的正确查找率

Example->MD5& HMAC

MD5加盐[加入一段复杂且长的特殊字符串,使得MD5暴力破解数据库无法匹配]
  • 缺点-->盐是写死在程序里的,被认为掌握,存在泄漏的危险
HMAC[另类加盐]
  • 优点-->给定一个密钥[一般从服务器获取,在注册时存储到服务器本地、客户端本地,客户端仅获取一次,这样减小了key被拦截的机率],对明文进行加密,并做两次散列--32位字符,这样的好处是,服务器随机给,客户端仅获取一次,所有的开发人员都不知道,不存在认为泄漏的潜在危险,也大大降低了被拦截的可能。
  • 缺点-->如果用户更换设备登录,那么该设备上是不具备对应的密钥的,此时用户便不能再登录了。所以,服务器端应该更换普通的账户保存方式[账号:密钥:加密之后的密码->(原始密码+KEY)HMAC<-]
HMAC客户端登录思路
  • 1.1 用户输入账号、密码
  • 1.2 本地查找密钥[如果没有密钥,向服务器获取(对应账号)]
  • 1.3 举例:QQ的设备锁(异地登陆),通过判断本地是否有密钥,进而判断是否为用户的设备,如果判断不是用户设备,则向之前有密钥的手机客户端发送是否解锁的信息,解锁后,服务器则向你发送新的密钥。
使得HMAC更进一步的安全[登录时]
  • 客户端:加密之后的密码 == (原始密码 + KEY)HMAC,再进一步做处理,最终向服务器发送的密码 == (加密之后的密码 + 201807021620)MD5
  • 服务器端:这时的判断进一步做更改,(加密之后的密码 + 201807021621) || (加密之后的密码 + 201807021620),使得只有1分钟的时效

钥匙串访问

1> 苹果的生态圈,从iOS7.0.3版本,开放给开发者
2> 钥匙串加密方式是AES加密,可以将保存的密码以明文的方式反算给你
3> 苹果原生的接口,都是C语言

1.下载 SSKeyChain
2. 根据GitHub上的指示,操作项目
3. TARGETS-> Capabilities-> Keychain Sharing ->ON

结束语

毕业了,心情复杂,略带平静......

你可能感兴趣的:(加密方法初解)