1. 哈希(散列)函数
-
定义
- Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
- 不属于加密算法,经常和加密一起来用
-
常用算法
- MD5: (Message Digest Algorithm, 消息摘要算法 第五版 )
- SHA1/256/512: (Secure Hash Algorithm ,安全哈希算法 )
- HMAC: (Hash-based Message Authentication Code ,哈希消息验证码)
-
特点
- 算法公开
- 不属于加密算法,经常和加密一起来用
- 对相同数据运算,得到的结果是一样的
- 对不同数据运算,如MD5的到的结果默认是128位 ,32个字符(16进制标识)。
- 这玩意没法逆运算
- 信息摘要,信息“指纹”,是用来做数据识别的
2. 对称加密
-
定义
- 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密
- 也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高
-
对称加密算法在电子商务交易过程中存在几个问题:
- 要求提供一条安全的渠道使通讯双方在首次通讯时协商一个共同的密钥。直接的面对面协商可能是不现实而且难于实施的,所以双方可能需要借助于邮件和电话等其它相对不够安全的手段来进行协商;
- 密钥的数目难于管理。因为对于每一个合作者都需要使用不同的密钥,很难适应开放社会中大量的信息交流;
- 对称加密算法一般不能提供信息完整性的鉴别。它无法验证发送者和接受者的身份;
- 对称密钥的管理和分发工作是一件具有潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的贸易双方必须保证采用的是相同的密钥,保证彼此密钥的交换是安全可靠的,同时还要设定防止密钥泄密和更改密钥的程序。
-
方法:
- DES
- 3DES
- AES(高级密码标准) 使用:苹果钥匙算法,美国国家安全局
AES的五种模式:
- ECB(Eletronic Code Book):电码本模式
这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。- CBC(Cipher Block Chaining):密码分组链接模式
这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。- CTR(Counter):计算器模式
计算器模式不常见,在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次。- CFB(Cipher FeedBack):密码反馈模式
- OFB(Output FeedBack):输出反馈模式
3.非对称
-
定义
- 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
- 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
- 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
-
方法
- RSA
- Elgamal
- 背包算法
- Rabin
- D-H
- ECC
算法公开
加密的使用场景
-
用户密码的加密
-
原则:
- 网络上不允许明文传递用户隐私信息!
- 本地不允许明文保存用户隐私信息
-
方法:
- MD5加密
不足:不够安全了,可以反查询(http://www.CMD5.com); - MD5加密 升级 MD5加盐 密码拼接上固定的 字符串
不足:盐是固定的,写死在程序里面,一旦泄漏就不安全了
一旦一个密码泄漏整个密码库也就都泄漏了 - HMAC
使用一个密钥加密,并且做两次散列
在实际开发中,密钥(key)来自于服务器(动态的)
一个账号对应一个key,而且可以更新
缺点:在下次更新 hash 值前,hasn值是唯一不变的, 黑客一旦在登录等操作截取取 hash 值可以使用hash值请求网络进行各种操作,
解决方法: 用户网络获取服务器的返回的动态值(时间戳等),和hash值就行拼接,再进行hash ,传给服务器进行请求,
思路:两个hash
1.用户从服务器获取的密钥(key)根据用户名字获取,拿到key 后拼接密码进行 hash
2.用户从服务器获取动态值(包含时间戳) 使用1.hash 拼接服务器的 动态值 进行hash 请求服务器
- MD5加密
-
搜索引擎
-
版权
-
签名
总结:公钥加密、私钥解密、私钥签名、公钥验签。
网友评论