信息安全的基础:对称加密、非对称加密、摘要算法
来源:互联网 发布:外汇模拟软件 编辑:程序博客网 时间:2024/06/08 04:49
加密分为两大类:对称加密、非对称加密,两类加密算法各有优点,在不同的场景使用不同的算法。
对称加密
加密方将原始数据和加密密钥一起经过特殊加密算法处理后,生成密文结果,解密方使用相同的秘钥及相同加密算法的逆算法对密文结果进行解密,公式如下:
加密方:密文结果 = 加密算法(原始数据 + 加密密钥)
解密方:原始数据 = 对应的逆算法(密文结果 + 解密秘钥)
加密密钥 == 解密秘钥
该算法具有以下特点:
- 加密方和解密方使用相同的秘钥
- 加解密的速度比非对称加密算法快,适合数据内容比较长的加密场景
- 数据传输的过程不安全,且容易被破解
- 密钥管理比较麻烦
非对称加密
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。
另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。
该算法具有以下特点:
- 保密性比较好,消除了用户交换秘钥的需要
- 算法强度复杂,安全性比较强
- 加解密速度没有对称加密算法快
- 用私钥加密,用其公钥解密,实现数字签名(注意:数字签名只是非对称加密的一种)。
应用场景:
1、公钥用于加密,私钥用于解密
请求的双方,接收方公布自己的公钥,发送方通过指定的加密算法和公钥对原始数据进行加密,接收方通过指定的逆加密算法和自己的私钥对密文数据进行解密。
发送方:密文结果 = 加密算法(原始数据 + 接收方的公钥)
接收方:原始数据 = 对应的逆算法(密文结果 + 接收方的私钥)
接收方的公钥 != 接收方的私钥
2、公钥用于解密,私钥用于加密(即数据签名)
请求的双方,发送方公布自己的公钥,发送方通过指定的加密算法和自己的私钥对原始数据进行加密,接收方通过指定的逆加密算法和发送方的公钥对密文数据进行解密。
发送方:密文结果 = 加密算法(原始数据 + 发送方的私钥)
接收方:原始数据 = 对应的逆算法(密文结果 + 发送方的公钥)
接收方的公钥 != 接收方的私钥
摘要
数据摘要算法是密码学算法中非常重要的一个分支,它通过对数据内容进行散列得到一个固定长度的密文信息。数据摘要算法也被称为哈希(Hash)算法、散列算法。
该算法具有以下特点:
- 对于任何长度的输入内容,都可以通过摘要算法生成一个固定长度的密文信息
- 摘要算法是防冲突的,即找不出摘要结果相同的两条信息
- 摘要结果是不可逆的,也就是无法通过摘要结果还原出相应的原始内容
- 任何输入内容的变化都将导致摘要结果的明显变化
应用场景:
当数据内容进行传输时,我们一般在传输前对数据内容进行摘要计算,并将数据内容和摘要结果发送给接收方,接收方收到数据后,使用相同的摘要算法对接收到的数据内容(不含发送方的摘要结果)也进行摘要计算,之后与发送方的摘要结果进行比较,如果结果一致,则说明数据是完整的,没有被串改,也没有发生数据丢失。常用的场景如下:
- 下载文件时,文件的完整性校验
- 接口交互时,交互数据的完整性校验
最近对加密算法比较感兴趣,整理一些文章,分享给大家,如有不正之处,欢迎批评指正。
参考资料
非对称加密算法
对称加密算法
摘要算法
数字签名
数字签名算法
对称加密、非对称加密、单向散列
- 信息安全的基础:对称加密、非对称加密、摘要算法
- 常用的安全算法-数字摘要、对称加密、非对称加密详解
- 对称加密,非对称加密,信息摘要算法的区别和联系
- 【信息安全】对称加密与非对称加密
- 安全算法(二)对称加密和非对称加密
- 对称加密 非对称加密,常见算法
- 从https的实现看数字证书、SSL、数字签名、摘要算法、对称/非对称加密
- Base64编码、MD5消息摘要、对称加密、非对称加密
- 对称加密/非对称加密
- 对称加密、非对称加密
- 对称加密/非对称加密
- 对称加密 非对称加密
- 对称加密、非对称加密
- 【安全加密技术】非对称加密
- Android安全加密:非对称加密
- Android安全加密:非对称加密
- Android安全加密:非对称加密
- 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS)
- caffe和tensorflow中padding区别
- 计算机二进制原码、反码、补码
- Java数组,去掉重复值、增加、删除数组元素
- "零基础学python"之神奇的python同步赋值及动态特性
- 使用Python进行文本分类
- 信息安全的基础:对称加密、非对称加密、摘要算法
- iOS自动化UI测试——KIF使用小样
- CorelDRAW 导航制作起来让网站更加醒目好看
- 关闭wi8.1系统安全软件
- Linux 习题3
- flume架构图
- JDBC连接和DBUtils的使用详解
- Java算法——判断一个数是否是回文数
- 51nod 1586 约数和