热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

奇妙的安全旅行之加密算法概述

前言hi,大家好呀,信息安全作为当前社会中比较重要的一个课题,已经覆盖了人们生活的方方面面,虽然有时候我们可能并没有意识到,其实信息安全防护已经在背后默默的保护我们的信息安全了。例




前言

hi,大家好呀,信息安全作为当前社会中比较重要的一个课题,已经覆盖了人们生活的方方面面,虽然有时候我们可能并没有意识到,其实信息安全防护已经在背后默默的保护我们的信息安全了。例如,当你在互联网上浏览网站时;当你准备注册或者登陆一个网站,需要输入密码时;当你在购物网站买商品进行支付时;当你到银行取钱时…

可以说信息安全是关系国家、城市信息、行业用户、百姓利益的关键问题,尤其是数据安全,身份隐私等信息的安全对于每个人都很重要。互联网最初,大家的安全意识还没有那么高,很多信息都是明文传输,甚至数据库中也是明文传输,这就带来了很多安全问题,比如网站被劫持,数据库被拖库,个人密码遭泄露等,已经给企业和社会都带来了非常高的威胁性。

今天我们就带大家一起开启我们的本次安全旅行,给大家详细深入的讲解一下加密算法的前世今生。本次安全之旅会带大家深入的了解一下我们在开发中常用到的一些加密算法及实现方式(本次示例均使用Java语言实现),希望能增强大家对加密算法的了解和认识,并能根据业务场景熟练应用。如果大家喜欢这个系列的文章,欢迎大家点赞、分享,在这里谢谢大家的支持啦!


基础概念

密码学的发展已经很久了,早在古希腊时期,人类就发明了置换密码。二战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。在1997年,美国国家标准局公布实施了“美国数据加密标准(DES)”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有 DES、RSA、SHA 等。

在密码学中有一些基础的概念,在我们正式开始学习之前,我们先从了解一下密码学中的相关概念。


  • 明文:指没有经过加密的信息或数据,通常可以直接识别出,例如个人信息、密码等。由于没有经过加密,明文很容易被识别与破解,因此在传输明文之前必须进行加密处理。
  • 密文:将明文通过加密算法按照一定规则进行加密之后,明文就会变成密文,通常为一堆无序字符,密文的形式复杂难以识别及理解。
  • 密钥:加密算法中使用的加密参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
  • 加密:将明文通过加密算法变成密文的过程。
  • 对称加密:通信双方同时掌握一个密钥,加密解密都是由一个密钥完成的(即加密密钥等于解密密钥,加解密密钥可以相互推倒出来)。双方通信前共同拟定一个密钥,不对第三方公开。
  • 分组加密:分组密码是将明文分成固定长度的组,每一组都采用同一密钥和算法进行加密,输出也是固定长度的密文。
  • 解密:将密文通过加密算法解密还原为明文的过程。

加密算法

随着技术的发展,也同时为了应对加密算法的安全性,我们的加密算法和安全保障手段也是不断变化升级的,目前在工作中常用的加密算法主要分为以下几种:


  • 消息摘要算法
  • 对称加密算法
  • 非对称加密算法
  • 国密算法

每种算法又包括不同的实现,其算法复杂度、安全性以及效率都有区别,为了便于大家从整体上对加密算法有个整体认识,我绘制了下面这种图,需要的建议收藏保存。
加密算法


消息摘要算法

消息摘要算法也被称为哈希(Hash)算法或散列算法,是一种单向加密算法。在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的"散列"或"消息摘要"(Message digest)。散列算法从严格意义上来讲并不算是加密算法,因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是主要用来做数字签名的。

消息摘要算法主要包含以下三种:


  • MD (Message Digest) 消息摘要算法
  • SHA (Secure Hash Algorithm) 安全散列算法
  • HMAC (Keyed-Hashing for Message Authentication) 消息认证码算法

常见的消息摘要算法有:MD2、MD4、MD5、SHA-1、SHA-256、SHA-512、HMAC 等。

消息摘要算法具有如下几个特性:


  • 运算速度快
  • 输出长度固定
  • 运算不可逆:已知运算结果的情况下,无法通过逆运算得到原文。
  • 高度离散性:输入值的细微变化,会导致运算结果差异巨大。
  • 弱碰撞性:不同输入值的散列值极低概率会出现结果相同。

MD 算法

MD 算法是由著名的非对称算法 RSA 发明人之一的罗纳德·李维斯特设计,MD 系列包含 MD2、MD4 以及最典型的 MD5。MD5的全称是Message-Digest Algorithm 5(信息-摘要算法第五版),是由 MD2 和 MD4 发展而来。


SHA 算法

SHA 算法,即安全散列算法(Secure Hash Algorithm)是一种与MD5同源的数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。

SHA 实际上是一系列算法的统称,分别包括:SHA-1、SHA-224、SHA-256、SHA-384 以及 SHA-512。


HMAC 算法

HMAC 是密钥相关的消息认证码,HMAC 运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

我们在使用 MD 或 SHA 消息摘要算法时,可以保证数据的完整性。但是在网络传输场景下,消息发送者仅发送原始数据和数据摘要信息是不够的,黑客可以通过伪装原始数据和数据摘要信息,达到攻击的目的,HMAC 算法通过密钥和数据共同生成消息摘要,黑客在不知道密钥的情况下,伪造数据和消息摘要难度进一步加大。


对称加密算法

对称加密算法是应用较早的加密算法,技术比较成熟。在对称加密算法中,数据发送方将明文和加密密钥一起经过特定的加密算法处理后,使其变成复杂的、无法理解的加密密文后发送给接收方。接收方收到密文报文后,若想解读原文,则需要使用报文加密时用的同一个密钥及相同算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,双方使用的密钥只有一个,双方都需要使用这个密钥对数据进行加密和解密,这就要求解密方事先必须获得加密密钥。

常见的对称加密算法有:DES、3DES(TripleDES)和AES。


DES 算法

DES 算法全称为 Data Encryption Standard,即数据加密算法,它是IBM公司于1975年研究成功并公开发布的。DES 算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节,共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。


3DES 算法

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。


AES 算法

AES(Advanced Encryption Standard),高级加密标准是美国国家标准技术研究所在2001年发布的,AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。

AES 算法是一种最常见的对称加密算法(微信小程序加密传输就是用这个加密算法),根据使用的密码长度,AES 算法最常见的有3种加密方案,用以适应不同的场景要求,分别是AES-128、AES-192 和 AES-256。


非对称加密算法

非对称加密需要两个密钥:公钥 (public key) 和私钥 (private key)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。

非对称加密算法对于密钥的保密性上要好于对称加密算法,它消除了用户需要交换密钥的安全隐患。但是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。

常见的非对称加密算法有:RSA 、DSA 和ECC 。


RSA 算法

RSA 加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA 是第一个能同时用于加密和数字签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO 推荐为公钥数据加密标准。RSA 加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。


DSA 算法

DSA 是基于整数有限域离散对数难题的,其安全性与 RSA 相比差不多。DSA 的一个重要特点是两个素数公开,这样,当使用别人的 p 和 q 时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。DSA 只是一种算法,和 RSA 不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多。

简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名,如果数据和签名不匹配则认为验证失败。数字签名的作用就是校验数据在传输过程中不被修改,数字签名,是单向加密的升级。


ECC 算法

椭圆加密算法(ECC)是一种公钥加密算法,由 Koblitz 和 Miller 两人于 1985 年提出,其数学基础是利用椭圆曲线上的有理点构成 Abel 加法群上椭圆离散对数的计算困难性。公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。椭圆曲线密码体制是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。

比特币钱包公钥的生成就使用了椭圆曲线算法,通过椭圆曲线乘法可以从私钥计算得到公钥, 这是不可逆转的过程。


对称加密算法与非对称加密算法的区别


  • 对称加密算法

加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦,一旦密钥泄露会有比较严重的安全问题。


  • 非对称加密算法

加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC 和 EIGamal。 实际中,一般是通过RSA加密AES的密钥,传输到接收方,接收方解密得到AES密钥,然后发送方和接收方用AES密钥来进行加解密。

像https就是用非对称密钥协商出对称密钥,再用对称密钥来加密业务数据。



国密算法

国密即国家密码局认定的国产密码算法,即商用密码。

国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1、SM2、SM3、SM4等。


SM1 算法

SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。


SM2 算法

SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。


SM3 算法

SM3 消息摘要,可以用MD5作为对比理解。该算法已公开,校验结果的摘要长度为256位。


SM4 算法

SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。


总结

在你看到或看不到的地方,安全已经在我们生活中无处不在了,安全事情无大小,同时安全也是大家最关心的问题,通过上面的介绍,相信大家也对加密算法有了整体的认识,那么接下来就跟我一起,对常用的加密算法来进一步学习,更深的认识吧。

创作不易,如果大家喜欢本文,欢迎点赞,转发,你的关注是我们继续前进的动力 _

欢迎大家关注「我是开发者FTD」公众号,微信号:ForTheDevelopers

也欢迎大家添加我的个人微信交流,微信号:ForTheDeveloper

关注开发,更关注开发者!



推荐阅读
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 本文总结了优化代码可读性的核心原则与技巧,通过合理的变量命名、函数和对象的结构化组织,以及遵循一致性等方法,帮助开发者编写更易读、维护性更高的代码。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • 本文将继续探讨前端开发中常见的算法问题,重点介绍如何将多维数组转换为一维数组以及验证字符串中的括号是否成对出现。通过多种实现方法的解析,帮助开发者更好地理解和掌握这些技巧。 ... [详细]
  • 算法稳定币:构建去中心化加密货币体系的新希望
    本文探讨了算法稳定币在加密经济中的潜力,分析其与传统稳定币及比特币等早期加密资产的区别,并展望其未来发展方向。随着DeFi的兴起,算法稳定币正逐渐成为实现中本聪最初愿景的关键角色。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 投资是一场长期的博弈,需要耐心和策略。每个人的投资决策都基于自身的经历和判断,他人的建议仅供参考,最终的选择应由自己权衡。本文将从基本面和技术面两方面对当前的数字货币市场进行分析,并提供相应的操作建议。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 序列化与反序列化是数据处理中的重要技术,特别是在网络通信和数据存储中。它们允许将复杂的数据结构转换为可传输或存储的格式,再从这些格式恢复原始数据。本文探讨了序列化与反序列化的基本概念,以及它们在不同协议模型中的角色。 ... [详细]
author-avatar
菜鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有