概念:一般翻译做“散列”,就是把任意长度的输入通过散列函数变化成固定长度的输出,该输出就是散列值。
散列的空间通常远远小于输入的空间,不同的输入会散列城相同的输出(散列冲突)。
数据结构
-对于数据空间的组织,散列开来,建立快速映射的关系,往往数据的插查询,插入,删除都比较迅速。接近于O(1)。
密码学的应用:
用户密码的加密搜索引擎版权数字签名 常见加密hash函数:-md5 -SHA1/256/512 -HMAC
MD5: 直接加密不足:不够安全了,可以反查询
加盐: 盐是固定的,写死在程序里面,一旦泄露就不安全了。
解决:加盐 - 足够长足够复杂 静态函数
登陆安全至上 用户的手机 用户密码加密 搜索引擎
对应 关键字md5 -s 按位相加 hash值权重的消息搜索关键词
版权压缩一下文件的hash判断的 文件完整性 上传资料
数字签名 对原始数据进行HASH使用RSA加密HASH值(这部分数据就是原始数据的签名信息)将原始数据+数字签名一起发给服务器验证然后两个端进行比对hash值是否一致,判断数据是否被篡改 对称加密算法
两种加密方式
ECB:电子密码本,每一块数据独立加密CBC:链式加密,每一块数据加密都依赖上一块数据,有效的保证了数据的完整性通过密钥加解密,安全系数没有RSA高。 密钥保护
常见算法: DES(用得少) 3DES AES 高级密码标准
使用两种方式命令 xxd 查看对应文件
现代密码学 算法几何! 圆 球 推荐阅读数学之美
DES(ecb ) AES(ecb)
直接使用CCCypte作为逆向开发还是有很多安全隐患的,无论是包装还是使用一层, 要继续加强,加符号断点 系统函数也是可以拦截到的
register read 64 p (char*)使用加密函数安全隐患
加密之前:不能直接使用,没有什么东西拿不到,只读取内存也是可以改的。让逆向变得更加难,参数是可以拿到的,所以直接拿到加密前的数据了。
系统加密函数,函数名都是确定的。 学习反汇编,逆向分析是一段一段的分析函数的调用:看关键字,看方法调用,使用之前写一点自己的逻辑:异常也是非常常用的。
不可逆(关键),数据指纹(数据验证)
运用:密码(直接用md5不好,肯定不可以 不可以反算,但可以查库(同样的数据,结果一样),MD5+加盐(不要使用固定盐)、HMAC加密方案:通过动态Key来加密数据、时间戳:更加灵活,保证加密的结果每次不同 ) 搜索引擎关键字 数字签名(HASH+RSA)
密码: 服务器不需要知道用户真实密码,只需要匹配HASH值
2.对称: DES 3DES AES
明文(秘钥)加密密文
密文(秘钥)加密明文
加密方式: ecb(电子密码本块)&cbc(iv 加密算法都喜欢结合几何)更安全(链:每一块数据依赖前一块数据)
终端openSSL 演示 代码:函数 CCCrypt函数 11个函数
安全问题: 不能直接用 加密之前对数据本身做一个处理
1.网络上不允许明文传递信息!
2.本地不允许明文保存用户隐私信息!
源码泄露了,用户的真实密码也没有泄漏(担当不起) 现在没有找回密码了,直接重置。
系统加密函数,函数名都是确定的。 学习反汇编,逆向分析是一段一段的分析函数的调用:看关键字,看方法调用,使用之前写一点自己的逻辑:异常也是非常常用的。 1.HASH特点:
不可逆(关键),数据指纹(数据验证)
运用:密码(直接用md5不好,肯定不可以 不可以反算,但可以查库(同样的数据,结果一样),MD5+加盐(不要使用固定盐)、HMAC加密方案:通过动态Key来加密数据、时间戳:更加灵活,保证加密的结果每次不同 ) 搜索引擎关键字 数字签名(HASH+RSA)
密码: 服务器不需要知道用户真实密码,只需要匹配HASH值
2.对称: DES 3DES AES
明文(秘钥)加密密文
密文(秘钥)加密明文
加密方式: ecb(电子密码本块)&cbc(iv 加密算法都喜欢结合几何)更安全(链:每一块数据依赖前一块数据)
终端openSSL 演示 代码:函数 CCCrypt函数 11个函数
安全问题: 不能直接用 加密之前对数据本身做一个处理
1.网络上不允许明文传递信息!
2.本地不允许明文保存用户隐私信息!
源码泄露了,用户的真实密码也没有泄漏(担当不起) 现在没有找回密码了,直接重置。