Ⅰ 当待加密明文长度为任意长时,如何使用DES算法来进行加密呢
不知道你用什么语言,下面是C#的写法。在C#里使用对称加密不考虑明文大小,因为明文被处理成流.
public class TestClass
{
static void Main(string[] args)
{
byte[] key = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] iv = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] bytes = Encoding.UTF8.GetBytes("任意长度字符串");
byte[] enBytes = Encrypt(bytes, key, iv);
}
static byte[] Encrypt(byte[] bytes, byte[] key, byte[] iv)
{
MemoryStream ms = new MemoryStream();
DESCryptoServiceProvider desCsp = new DESCryptoServiceProvider();
desCsp.BlockSize = iv.Length * 8;
CryptoStream cs = new CryptoStream(ms, desCsp.CreateEncryptor(key, iv), CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
cs.Close();
desCsp.Clear();
return ms.ToArray();
}
}
Ⅱ 对称密码体制根据对明文加密方式的不同分为分组密码和序列密码
最热门的话题是INTERNET与异步传输模式ATM技术。信息技术与网络的应用已经成为衡量21世界国力与企业竞争力的重要标准。国家信息基础设施建设计划,NII被称为信息高速公路。Internet,Intranet与Extranet和电子商务已经成为企业网研究与应用的热点。计算机网络建立的主要目标是实现计算机资源的共享。计算机资源主要是计算机硬件,软件与数据。我们判断计算机是或互连成计算机网络,主要是看它们是不是独立的“自治计算机”。分布式操作系统是以全局方式管理系统资源,它能自动为用户任务调度网络资源。分布式系统与计算机网络的主要是区别不在他们的物理结构,而是在高层软件上。按传输技术分为:1。广播式网络。2。点--点式网络。采用分组存储转发与路由选择是点-点式网络与广播网络的重要区别之一。按规模分类:局域网,城域网与广域网。广域网(远程网)以下特点:1适应大容量与突发性通信的要求。2适应综合业务服务的要求。3开放的设备接口与规范化的协议。4完善的通信服务与网络管理。X.25网是一种典型的公用分组交换网,也是早期广域网中广泛使用的一种通信子网。变化主要是以下3个方面:1传输介质由原来的电缆走向光纤。2多个局域网之间告诉互连的要求越来越强烈。3用户设备大大提高。在数据传输率高,误码率低的光纤上,使用简单的协议,以减少网络的延迟,而必要的差错控制功能将由用户设备来完成。这就是帧中续FR,FrameRelay技术产生的背景。决定局域网特性的主要技术要素为网络拓扑,传输介质与介质访问控制方法。从局域网介质控制方法的角度,局域网分为共享式局域网与交换式局域网。城域网MAN介于广域网与局域网之间的一种高速网络。FDDI是一种以光纤作为传输介质的高速主干网,它可以用来互连局域网与计算机。各种城域网建设方案有几个相同点:传输介质采用光纤,交换接点采用基于IP交换的高速路由交换机或ATM交换机,在体系结构上采用核心交换层,业务汇聚层与接入层三层模式。计算机网络的拓扑主要是通信子网的拓扑构型。网络拓扑可以根据通信子网中通信信道类型分为:4点-点线路通信子网的拓扑。星型,环型,树型,网状型。5广播式通信子网的拓扑。总线型,树型,环型,无线通信与卫星通信型。传输介质是网络中连接收发双方的物理通路,也是通信中实际传送信息的载体。常用的传输介质为:双绞线,同轴电缆,光纤电缆和无线通信与卫星通信信道。双绞线由按规则螺旋结构排列的两根,四根或八根绝缘导线组成。屏蔽双绞线STP和非屏蔽双绞线UTP。屏蔽双绞线由外部保护层,屏蔽层与多对双绞线组成。非屏蔽双绞线由外部保护层,多对双绞线组成。三类线,四类线,五类线。双绞线用做远程中续线,最大距离可达15公里;用于100Mbps局域网时,与集线器最大距离为100米。同轴电缆由内导体,外屏蔽层,绝缘层,外部保护层。分为:基带同轴电缆和宽带同轴电缆。单信道宽带:宽带同轴电缆也可以只用于一条通信信道的高速数字通信。光纤电缆简称为光缆。由光纤芯,光层与外部保护层组成。在光纤发射端,主要是采用两种光源:发光二极管LED与注入型激光二极管ILD。光纤传输分为单模和多模。区别在与光钎轴成的角度是或分单与多光线传播。单模光纤优与多模光纤。电磁波的传播有两种方式:1。是在空间自由传播,既通过无线方式。2。在有限的空间,既有线方式传播。移动通信:移动与固定,移动与移动物体之间的通信。移动通信手段:1无线通信系统。2微波通信系统。频率在100MHz-10GHz的信号叫做微波信号,它们对应的信号波长为3m-3cm。3蜂窝移动通信系统。多址接入方法主要是有:频分多址接入FDMA,时分多址接入TDMA与码分多址接入CDMA。4卫星移动通信系统。商用通信卫星一般是被发射在赤道上方35900km的同步轨道上描述数据通信的基本技术参数有两个:数据传输率与误码率。数据传输率是描述数据传输系统的重要指标之一。S=1/T。对于二进制信号的最大数据传输率Rmax与通信信道带宽B(B=f,单位是Hz)的关系可以写为:Rmax=2*f(bps)在有随机热噪声的信道上传输数据信号时,数据传输率Rmax与信道带宽B,信噪比S/N关系为:Rmax=B*LOG⒉(1+S/N)误码率是二进制码元在数据传输系统中被传错的概率,它在数值上近似等于:Pe=Ne/N(传错的除以总的)对于实际数据传输系统,如果传输的不是二进制码元,要折合为二进制码元来计算。这些为网络数据传递交换而指定的规则,约定与标准被称为网络协议。协议分为三部分:语法。语义。时序。将计算机网络层次模型和各层协议的集合定义为计算机网络体系结构。计算机网络中采用层次结构,可以有以下好处:1各层之间相互独立。2灵活性好。3各层都可以采用最合适的技术来实现,各层实现技术的改变不影响其他各层。4易于实现和维护。5有利于促进标准化。该体系结构标准定义了网络互连的七层框架,既ISO开放系统互连参考模型。在这一框架中进一步详细规定了每一层的功能,以实现开放系统环境中的互连性,互操作性与应用的可移植性。OSI标准制定过程中采用的方法是将整个庞大而复杂的问题划分为若干个容易处理的小问题,这就是分层的体系结构法。在OSI中,采用了三级抽象,既体系结构,服务定义,协议规格说明。OSI七层:2物理层:主要是利用物理传输介质为数据链路层提供物理连接,以便透明的传递比特流。3数据链路层。在通信实体之间建立数据链路连接,传送以帧为单位的数据,采用差错控制,流量控制方法。4网络层:通过路由算法,为分组通过通信子网选择最适当的路径。5传输层:是向用户提供可靠的端到端服务,透明的传送报文。6会话层:组织两个会话进程之间的通信,并管理数据的交换。7表示层:处理在两个通信系统中交换信息的表示方式。8应用层:应用层是OSI参考模型中的最高层。确定进程之间通信的性质,以满足用户的需要。TCP/IP参考模型可以分为:应用层,传输层,互连层,主机-网络层。互连层主要是负责将源主机的报文分组发送到目的主机,源主机与目的主机可以在一个网上,也可以不在一个网上。传输层主要功能是负责应用进程之间的端到端的通信。TCP/IP参考模型的传输层定义了两种协议,既传输控制协议TCP和用户数据报协议UDP。TCP协议是面向连接的可靠的协议。UDP协议是无连接的不可靠协议。主机-网络层负责通过网络发送和接受IP数据报。按照层次结构思想,对计算机网络模块化的研究结果是形成了一组从上到下单向依赖关系的协议栈,也叫协议族。应用层协议分为:1。一类依赖于面向连接的TCP。2.一类是依赖于面向连接的UDP协议。10另一类既依赖于TCP协议,也可以依赖于UDP协议。NSFNET采用的是一种层次结构,可以分为主干网,地区网与校园网。作为信息高速公路主要技术基础的数据通信网具有以下特点:1适应大容量与突发性通信的要求。2适应综合业务服务的要求。3开放的设备接口与规范化的协议。4完善的通信服务与网络管理。人们将采用X。25建议所规定的DTE与DCE接口标准的公用分组交换网叫做X。25网。帧中继是一种减少接点处理时间的技术。综合业务数字网ISDN:B-ISDN与N-ISDN的区别主要在:2N是以目前正在使用的公用电话交换网为基础,而B是以光纤作为干线和用户环路传输介质。3N采用同步时分多路复用技术,B采用异步传输模式ATM技术。4N各通路速率是预定的,B使用通路概念,速率不预定。异步传输模式ATM是新一代的数据传输与分组交换技术,是当前网络技术研究与应用的热点问题。ATM技术的主要特点是:3ATM是一种面向连接的技术,采用小的,固定长度的数据传输单元。4各类信息均采用信元为单位进行传送,ATM能够支持多媒体通信。5ATM以统计时分多路复用方式动态的分配网络,网络传输延迟小,适应实时通信的要求。6ATM没有链路对链路的纠错与流量控制,协议简单,数据交换率高。7ATM的数据传输率在155Mbps-2。4Gbps。促进ATM发展的要素:2人们对网络带宽要求的不断增长。3用户对宽带智能使用灵活性的要求。4用户对实时应用的需求。5网络的设计与组建进一步走向标准化的需求。一个国家的信息高速路分为:国家宽带主干网,地区宽带主干网与连接最终用户的接入网。解决接入问题的技术叫做接入技术。可以作为用户接入网三类:邮电通信网,计算机网络(最有前途),广播电视网。网络管理包括五个功能:配置管理,故障管理,性能管理,计费管理和安全管理。代理位于被管理的设备内部,它把来自管理者的命令或信息请求转换为本设备特有的指令,完成管理者的指示,或返回它所在设备的信息。管理者和代理之间的信息交换可以分为两种:从管理者到代理的管理操作;从代理到管理者的事件通知。配置管理的目标是掌握和控制网络和系统的配置信息以及网络各设备的状态和连接管理。现代网络设备由硬件和设备驱动组成。配置管理最主要的作用是可以增强网络管理者对网络配置的控制,它是通过对设备的配置数据提供快速的访问来实现的。故障就是出现大量或严重错误需要修复的异常情况。故障管理是对计算机网络中的问题或故障进行定位的过程。故障管理最主要的作用是通过提供网络管理者快速的检查问题并启动恢复过程的工具,使网络的可靠性得到增强。故障标签就是一个监视网络问题的前端进程。性能管理的目标是衡量和呈现网络特性的各个方面,使网络的性能维持在一个可以接受的水平上。性能管理包括监视和调整两大功能。记费管理的目标是跟踪个人和团体用户对网络资源的使用情况,对其收取合理的费用。记费管理的主要作用是网络管理者能测量和报告基于个人或团体用户的记费信息,分配资源并计算用户通过网络传输数据的费用,然后给用户开出帐单。安全管理的目标是按照一定的方法控制对网络的访问,以保证网络不被侵害,并保证重要的信息不被未授权用户访问。安全管理是对网络资源以及重要信息访问进行约束和控制。在网络管理模型中,网络管理者和代理之间需要交换大量的管理信息,这一过程必须遵循统一的通信规范,我们把这个通信规范称为网络管理协议。网络管理协议是高层网络应用协议,它建立在具体物理网络及其基础通信协议基础上,为网络管理平台服务。目前使用的标准网络管理协议包括:简单网络管理协议SNMP,公共管理信息服务/协议CMIS/CMIP,和局域网个人管理协议LMMP等。SNMP采用轮循监控方式。代理/管理站模式。管理节点一般是面向工程应用的工作站级计算机,拥有很强的处理能力。代理节点可以是网络上任何类型的节点。SNMP是一个应用层协议,在TCP/IP网络中,它应用传输层和网络层的服务向其对等层传输信息。CMIP的优点是安全性高,功能强大,不仅可用于传输管理数据,还可以执行一定的任务。信息安全包括5个基本要素:机密性,完整性,可用性,可控性与可审查性。3D1级。D1级计算机系统标准规定对用户没有验证。例如DOS。WINDOS3。X及WINDOW95(不在工作组方式中)。Apple的System7。X。4C1级提供自主式安全保护,它通过将用户和数据分离,满足自主需求。C1级又称为选择安全保护系统,它描述了一种典型的用在Unix系统上的安全级别。C1级要求硬件有一定的安全级别,用户在使用前必须登陆到系统。C1级的防护的不足之处在与用户直接访问操作系统的根。9C2级提供比C1级系统更细微的自主式访问控制。为处理敏感信息所需要的最底安全级别。C2级别还包含有受控访问环境,该环境具有进一步限制用户执行一些命令或访问某些文件的权限,而且还加入了身份验证级别。例如UNIX系统。XENIX。Novell3。0或更高版本。WINDOWSNT。10B1级称为标记安全防护,B1级支持多级安全。标记是指网上的一个对象在安全保护计划中是可识别且受保护的。B1级是第一种需要大量访问控制支持的级别。安全级别存在保密,绝密级别。11B2又称为结构化保护,他要求计算机系统中的所有对象都要加上标签,而且给设备分配安全级别。B2级系统的关键安全硬件/软件部件必须建立在一个形式的安全方法模式上。12B3级又叫安全域,要求用户工作站或终端通过可信任途径连接到网络系统。而且这一级采用硬件来保护安全系统的存储区。B3级系统的关键安全部件必须理解所有客体到主体的访问,必须是防窜扰的,而且必须足够小以便分析与测试。30A1最高安全级别,表明系统提供了最全面的安全,又叫做验证设计。所有来自构成系统的部件来源必须有安全保证,以此保证系统的完善和安全,安全措施还必须担保在销售过程中,系统部件不受伤害。网络安全从本质上讲就是网络上的信息安全。凡是涉及到网络信息的保密性,完整性,可用性,真实性和可控性的相关技术和理论都是网络安全的研究领域。安全策约是在一个特定的环境里,为保证提供一定级别的安全保护所必须遵守的规则。安全策约模型包括了建立安全环境的三个重要组成部分:威严的法律,先进的技术和严格的管理。网络安全是网络系统的硬件,软件以及系统中的数据受到保护,不会由于偶然或恶意的原因而遭到破坏,更改,泄露,系统能连续,可靠和正常的运行,网络服务不中断。保证安全性的所有机制包括以下两部分:1对被传送的信息进行与安全相关的转换。2两个主体共享不希望对手得知的保密信息。安全威胁是某个人,物,事或概念对某个资源的机密性,完整性,可用性或合法性所造成的危害。某种攻击就是某种威胁的具体实现。安全威胁分为故意的和偶然的两类。故意威胁又可以分为被动和主动两类。中断是系统资源遭到破坏或变的不能使用。这是对可用性的攻击。截取是未授权的实体得到了资源的访问权。这是对保密性的攻击。修改是未授权的实体不仅得到了访问权,而且还篡改了资源。这是对完整性的攻击。捏造是未授权的实体向系统中插入伪造的对象。这是对真实性的攻击。被动攻击的特点是偷听或监视传送。其目的是获得正在传送的信息。被动攻击有:泄露信息内容和通信量分析等。主动攻击涉及修改数据流或创建错误的数据流,它包括假冒,重放,修改信息和拒绝服务等。假冒是一个实体假装成另一个实体。假冒攻击通常包括一种其他形式的主动攻击。重放涉及被动捕获数据单元以及后来的重新发送,以产生未经授权的效果。修改消息意味着改变了真实消息的部分内容,或将消息延迟或重新排序,导致未授权的操作。拒绝服务的禁止对通信工具的正常使用或管理。这种攻击拥有特定的目标。另一种拒绝服务的形式是整个网络的中断,这可以通过使网络失效而实现,或通过消息过载使网络性能降低。防止主动攻击的做法是对攻击进行检测,并从它引起的中断或延迟中恢复过来。从网络高层协议角度看,攻击方法可以概括为:服务攻击与非服务攻击。服务攻击是针对某种特定网络服务的攻击。非服务攻击不针对某项具体应用服务,而是基于网络层等低层协议进行的。非服务攻击利用协议或操作系统实现协议时的漏洞来达到攻击的目的,是一种更有效的攻击手段。网络安全的基本目标是实现信息的机密性,完整性,可用性和合法性。主要的可实现威胁:3渗入威胁:假冒,旁路控制,授权侵犯。4植入威胁:特洛伊木马,陷门。病毒是能够通过修改其他程序而感染它们的一种程序,修改后的程序里面包含了病毒程序的一个副本,这样它们就能继续感染其他程序。网络反病毒技术包括预防病毒,检测病毒和消毒三种技术。1预防病毒技术。它通过自身长驻系统内存,优先获得系统的控制权,监视和判断系统中是或有病毒存在,进而阻止计算机病毒进入计算机系统对系统进行破坏。这类技术有:加密可执行程序,引导区保护,系统监控与读写控制。2.检测病毒技术。通过对计算机病毒的特征来进行判断的技术。如自身效验,关键字,文件长度的变化等。3.消毒技术。通过对计算机病毒的分析,开发出具有删除病毒程序并恢复原元件的软件。网络反病毒技术的具体实现方法包括对网络服务器中的文件进行频繁地扫描和检测,在工作站上用防病毒芯片和对网络目录以及文件设置访问权限等。网络信息系统安全管理三个原则:1多人负责原则。2任期有限原则。3职责分离原则。保密学是研究密码系统或通信安全的科学,它包含两个分支:密码学和密码分析学。需要隐藏的消息叫做明文。明文被变换成另一种隐藏形式被称为密文。这种变换叫做加密。加密的逆过程叫组解密。对明文进行加密所采用的一组规则称为加密算法。对密文解密时采用的一组规则称为解密算法。加密算法和解密算法通常是在一组密钥控制下进行的,加密算法所采用的密钥成为加密密钥,解密算法所使用的密钥叫做解密密钥。密码系统通常从3个独立的方面进行分类:1按将明文转化为密文的操作类型分为:置换密码和易位密码。所有加密算法都是建立在两个通用原则之上:置换和易位。2按明文的处理方法可分为:分组密码(块密码)和序列密码(流密码)。3按密钥的使用个数分为:对称密码体制和非对称密码体制。如果发送方使用的加密密钥和接受方使用的解密密钥相同,或从其中一个密钥易于的出另一个密钥,这样的系统叫做对称的,但密钥或常规加密系统。如果发送放使用的加密密钥和接受方使用的解密密钥不相同,从其中一个密钥难以推出另一个密钥,这样的系统就叫做不对称的,双密钥或公钥加密系统。分组密码的加密方式是首先将明文序列以固定长度进行分组,每一组明文用相同的密钥和加密函数进行运算。分组密码设计的核心上构造既具有可逆性又有很强的线性的算法。序列密码的加密过程是将报文,话音,图象,数据等原始信息转化成明文数据序列,然后将它同密钥序列进行异或运算。生成密文序列发送给接受者。数据加密技术可以分为3类:对称型加密,不对称型加密和不可逆加密。对称加密使用单个密钥对数据进行加密或解密。不对称加密算法也称为公开加密算法,其特点是有两个密钥,只有两者搭配使用才能完成加密和解密的全过程。不对称加密的另一用法称为“数字签名”,既数据源使用其私有密钥对数据的效验和或其他与数据内容有关的变量进行加密,而数据接受方则用相应的公用密钥解读“数字签名”,并将解读结果用于对数据完整性的检验。不可逆加密算法的特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有同样输入的输入数据经过同样的不可逆算法才能得到同样的加密数据。加密技术应用于网络安全通常有两种形式,既面向网络和面向应用程序服务。面向网络服务的加密技术通常工作在网络层或传输层,使用经过加密的数据包传送,认证网络路由及其其他网络协议所需的信息,从而保证网络的连通性和可用性不受侵害。面向网络应用程序服务的加密技术使用则是目前较为流行的加密技术的使用方法。从通信网络的传输方面,数据加密技术可以分为3类:链路加密方式,节点到节点方式和端到端方式。链路加密方式是一般网络通信安全主要采用的方式。节点到节点加密方式是为了解决在节点中数据是明文的缺点,在中间节点里装有加,解密的保护装置,由这个装置来完成一个密钥向另一个密钥的变换。在端到端机密方式中,由发送方加密的数据在没有到达最终目的节点之前是不被解密的。试图发现明文或密钥的过程叫做密码分析。算法实际进行的置换和转换由保密密钥决定。密文由保密密钥和明文决定。对称加密有两个安全要求:1需要强大的加密算法。2发送方和接受方必须用安全的方式来获得保密密钥的副本。常规机密的安全性取决于密钥的保密性,而不是算法的保密性。IDEA算法被认为是当今最好最安全的分组密码算法。公开密钥加密又叫做非对称加密。公钥密码体制有两个基本的模型,一种是加密模型,一种是认证模型。通常公钥加密时候使用一个密钥,在解密时使用不同但相关的密钥。常规加密使用的密钥叫做保密密钥。公钥加密使用的密钥对叫做公钥或私钥。RSA体制被认为是现在理论上最为成熟完善的一种公钥密码体制。密钥的生存周期是指授权使用该密钥的周期。在实际中,存储密钥最安全的方法就是将其放在物理上安全的地方。密钥登记包括将产生的密钥与特定的应用绑定在一起。密钥管理的重要内容就是解决密钥的分发问题。密钥销毁包括清除一个密钥的所有踪迹。密钥分发技术是将密钥发送到数据交换的两方,而其他人无法看到的地方。数字证书是一条数字签名的消息,它通常用与证明某个实体的公钥的有效性。数字证书是一个数字结构,具有一种公共的格式,它将某一个成员的识别符和一个公钥值绑定在一起。人们采用数字证书来分发公钥。序列号:由证书颁发者分配的本证书的唯一标示符。认证是防止主动攻击的重要技术,它对于开放环境中的各种信息系统的安全有重要作用。认证是验证一个最终用户或设备的声明身份的过程。主要目的为:4验证信息的发送者是真正的,而不是冒充的,这称为信源识别。5验证信息的完整性,保证信息在传送过程中未被窜改,重放或延迟等。认证过程通常涉及加密和密钥交换。帐户名和口令认证方式是最常用的一种认证方式。授权是把访问权授予某一个用户,用户组或指定系统的过程。访问控制是限制系统中的信息只能流到网络中的授权个人或系统。有关认证使用的技术主要有:消息认证,身份认证和数字签名。消息认证的内容包括为:1证实消息的信源和信宿。2消息内容是或曾受到偶然或有意的篡改。3消息的序号和时间性。消息认证的一般方法为:产生一个附件。身份认证大致分为3类:1个人知道的某种事物。2个人持证3个人特征。口令或个人识别码机制是被广泛研究和使用的一种身份验证方法,也是最实用的认证系统所依赖的一种机制。为了使口令更加安全,可以通过加密口令或修改加密方法来提供更强健的方法,这就是一次性口令方案,常见的有S/KEY和令牌口令认证方案。持证为个人持有物。数字签名的两种格式:2经过密码变换的被签名信息整体。3附加在被签消息之后或某个特定位置上的一段签名图样。对与一个连接来说,维持认证的唯一法是同时使用连接完整性服务。防火墙总体上分为包过滤,应用级网关和代理服务等几大类型。数据包过滤技术是在网络层对数据包进行选择。应用级网关是在网络应用层上建立协议过滤和转发功能。代理服务也称链路级网关或TCP通道,也有人将它归于应用级网关一类。防火墙是设置在不同网络或网络安全域之间的一系列不见的组合。它可以通过检测,限制,更改跨越防火墙的数据流,尽可能的对外部屏蔽网络内部的消息,结构和运行情况,以此来实现网络的安全保护。防火墙的设计目标是:1进出内部网的通信量必须通过防火墙。2只有那些在内部网安全策约中定义了的合法的通信量才能进出防火墙。3防火墙自身应该防止渗透。防火墙能有效的防止外来的入侵,它在网络系统中的作用是:1控制进出网络的信息流向和信息包。2提供使用和流量的日志和审记。3隐藏内部IP以及网络结构细节。4提供虚拟专用网功能。通常有两种设计策约:允许所有服务除非被明确禁止;禁止所有服务除非被明确允许。防火墙实现站点安全策约的技术:3服务控制。确定在围墙外面和里面可以访问的INTERNET服务类型。4方向控制。启动特定的服务请求并允许它通过防火墙,这些操作具有方向性。5用户控制。根据请求访问的用户来确定是或提供该服务。6行为控制。控制如何使用某种特定的服务。影响防火墙系统设计,安装和使用的网络策约可以分为两级:高级的网络策约定义允许和禁止的服务以及如何使用服务。低级的网络策约描述了防火墙如何限制和过滤在高级策约中定义的服务。
Ⅲ 传统的加密方法有哪些
本文只是概述几种简单的传统加密算法,没有DES,没有RSA,没有想象中的高端大气上档次的东东。。。但是都是很传统很经典的一些算法
首先,提到加密,比如加密一段文字,让其不可读,一般人首先会想到的是将其中的各个字符用其他一些特定的字符代替,比如,讲所有的A用C来表示,所有的C用E表示等等…其中早的代替算法就是由Julius Caesar发明的Caesar,它是用字母表中每个字母的之后的第三个字母来代替其本身的(C=E(3,p)=(p+3) mod 26),但是,这种加密方式,很容易可以用穷举算法来破解,毕竟只有25种可能的情况..
为了改进上诉算法,增加其破解的难度,我们不用简单的有序的替代方式,我们让替代无序化,用其中字母表的一个置换(置换:有限元素的集合S的置换就是S的所有元素的有序排列,且每个元素就出现一次,如S={a,b}其置换就只有两种:ab,ba),这样的话,就有26!种方式,大大的增加了破解的难度,但是这个世界聪明人太多,虽然26!很多,但是语言本身有一定的特性,每个字母在语言中出现的相对频率可以统计出来的,这样子,只要密文有了一定数量,就可以从统计学的角度,得到准确的字母匹配了。
上面的算法我们称之为单表代替,其实单表代替密码之所以较容易被攻破,因为它带有原始字母使用频率的一些统计学特征。有两种主要的方法可以减少代替密码里明文结构在密文中的残留度,一种是对明文中的多个字母一起加密,另一种是采用多表代替密码。
先说多字母代替吧,最着名的就是playfair密码,它把明文中的双字元音节作为一个单元并将其转换成密文的双字元音节,它是一个基于由密钥词构成的5*5的字母矩阵中的,一个例子,如密钥为monarchy,将其从左往右从上往下填入后,将剩余的字母依次填入剩下的空格,其中I/J填入同一个空格:
对明文加密规则如下:
1 若p1 p2在同一行,对应密文c1 c2分别是紧靠p1 p2 右端的字母。其中第一列被看做是最后一列的右方。
2 若p1 p2在同一列,对应密文c1 c2分别是紧靠p1 p2 下方的字母。其中第一行被看做是最后一行的下方。
3 若p1 p2不在同一行,不在同一列,则c1 c2是由p1 p2确定的矩形的其他两角的字母,并且c1和p1, c2和p2同行。
4 若p1 p2相同,则插入一个事先约定的字母,比如Q 。
5 若明文字母数为奇数时,则在明文的末端添加某个事先约定的字母作为填充。
虽然相对简单加密,安全性有所提高,但是还是保留了明文语言的大部分结构特征,依旧可以破解出来,另一个有意思的多表代替密码是Hill密码,由数学家Lester Hill提出来的,其实就是利用了线性代数中的可逆矩阵,一个矩阵乘以它的逆矩阵得到单位矩阵,那么假设我们对密文每m个字母进行加密,那么将这m个字母在字母表中的序号写成矩阵形式设为P(如abc,[1,2,3]),密钥就是一个m阶的矩阵K,则C=P*K mod26,,解密的时候只要将密文乘上K的逆矩阵模26就可以了。该方法大大的增加了安全性。
Ⅳ 利用RSA算法运算,如果p=11,q=13, e=103,对明文3进行加密.求d及密文
取2个质数p=11,q=13,p和q的乘积为n=p×q=143,算出φ(n)=n-p-q+1=120;再选取一个与φ(n)互质的数,例如e=7,则公开密钥=n,e=143,7.
对于这个e值,用欧几里德扩展算法可以算出其逆:d=103.因为e×d=7×103=721,满足e×d
mod
z
=1;即721
mod
120=1成立.则秘密密钥=n,d=143,103,
设发送方需要发送机密信息(明文)m=3,发送方已经从公开媒体得到了接收方的公开密钥n,e=143,7,于是发送方算出加密后的密文c=
m的e次方
mod
n=42
Ⅳ 恺撒密码关于密钥到底怎么用 也就是恺撒密码2怎么给明文加密设置密匙,不要复制 要简单易懂的语言
恺撒密码最简单的那种就是将各个字母做一个简单的移位,复杂一些的恺撒密码2的话,就是对26个字母不是顺序的位移,而是不同的字母有不同的位移。这样的话,你就需要一个26个字母的密钥来给26个字母做加密和解密。
Ⅵ 使用RSA公开密钥体制进行加密,若P=2,q=5,求公钥e,私钥d,给出明文m=2的加解密过程
n=P*q=10
n的欧拉值=(p-1)*(q-1)=4
e满足1<e<n的欧拉值,且 gcd(n的欧拉值,e)=1 所以 e只能为3
d*e=1 mod n的欧拉值 即 d*3= 1 mod 4 所以d可以取3
{3,10}为公钥 {310}为密钥
加密:
c=m^e mod n =2^3 mod 10 =8
解密
m=c^d mod n =8^3mod 10 = 2
Ⅶ 十大常见密码加密方式
一、密钥散列
采用MD5或者SHA1等散列算法,对明文进行加密。严格来说,MD5不算一种加密算法,而是一种摘要算法。无论多长的输入,MD5都会输出一个128位(16字节)的散列值。而SHA1也是流行的消息摘要算法,它可以生成一个被称为消息摘要的160位(20字节)散列值。MD5相对SHA1来说,安全性较低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。
二、对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
三、非对称加密
非对称加密算法是一种密钥的保密方法,它需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。非对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
四、数字签名
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。
五、直接明文保存
早期很多这样的做法,比如用户设置的密码是“123”,直接就将“123”保存到数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。
六、使用MD5、SHA1等单向HASH算法保护密码
使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。
七、特殊的单向HASH算法
由于单向HASH算法在保护密码方面不再安全,于是有些公司在单向HASH算法基础上进行了加盐、多次HASH等扩展,这些方式可以在一定程度上增加破解难度,对于加了“固定盐”的HASH算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行破解,对于多次HASH,也只是增加了破解的时间,并没有本质上的提升。
八、PBKDF2
该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。
九、BCrypt
BCrypt 在1999年就产生了,并且在对抗 GPU/ASIC 方面要优于 PBKDF2,但是我还是不建议你在新系统中使用它,因为它在离线破解的威胁模型分析中表现并不突出。
十、SCrypt
SCrypt 在如今是一个更好的选择:比 BCrypt设计得更好(尤其是关于内存方面)并且已经在该领域工作了 10 年。另一方面,它也被用于许多加密货币,并且我们有一些硬件(包括 FPGA 和 ASIC)能实现它。 尽管它们专门用于采矿,也可以将其重新用于破解。
Ⅷ 对称加密算法以及使用方法
加密的原因:保证数据安全
加密必备要素:1、明文/密文 2、秘钥 3、算法
秘钥:在密码学中是一个定长的字符串、需要根据加密算法确定其长度
加密算法解密算法一般互逆、也可能相同
常用的两种加密方式:
对称加密:秘钥:加密解密使用同一个密钥、数据的机密性双向保证、加密效率高、适合加密于大数据大文件、加密强度不高(相对于非对称加密)
非对称加密:秘钥:加密解密使用的不同秘钥、有两个密钥、需要使用密钥生成算法生成两个秘钥、数据的机密性只能单向加密、如果想解决这个问题、双向都需要各自有一对秘钥、加密效率低、加密强度高
公钥:可以公开出来的密钥、公钥加密私钥解密
私钥:需要自己妥善保管、不能公开、私钥加密公钥解密
安全程度高:多次加密
按位异或运算
凯撒密码:加密方式 通过将铭文所使用的字母表按照一定的字数平移来进行加密
mod:取余
加密三要素:明文/密文(字母)、秘钥(3)、算法(向右平移3/-3)
安全常识:不要使用自己研发的算法、不要钻牛角尖、没必要研究底层实现、了解怎么应用;低强度的密码比不进行任何加密更危险;任何密码都会被破解;密码只是信息安全的一部分
保证数据的机密性、完整性、认证、不可否认性
计算机操作对象不是文字、而是由0或1排列而成的比特序列、程序存储在磁盘是二进制的字符串、为比特序列、将现实的东西映射为比特序列的操作称为编码、加密又称之为编码、解密称之为解码、根据ASCII对照表找到对应的数字、转换成二进制
三种对称加密算法:DES\3DES\ AES
DES:已经被破解、除了用它来解密以前的明文、不再使用
密钥长度为56bit/8、为7byte、每隔7个bit会设置一个用于错误检查的比特、因此实际上是64bit
分组密码(以组为单位进行处理):加密时是按照一个单位进行加密(8个字节/64bit为一组)、每一组结合秘钥通过加密算法得到密文、加密后的长度不变
3DES:三重DES为了增加DES的强度、将DES重复三次所得到的一种加密算法 密钥长度24byte、分成三份 加密--解密--加密 目的:为了兼容DES、秘钥1秘钥2相同==三个秘钥相同 ---加密一次 密钥1秘钥3相同--加密三次 三个密钥不相同最好、此时解密相当于加密、中间的一次解密是为了有三个密钥相同的情况
此时的解密操作与加密操作互逆,安全、效率低
数据先解密后加密可以么?可以、解密相当于加密、加密解密说的是算法
AES:(首选推荐)底层算法为Rijndael 分组长度为128bit、密钥长度为128bit到256bit范围内就可以 但是在AES中、密钥长度只有128bit\192bit\256bit 在go提供的接口中、只能是16字节(128bit)、其他语言中秘钥可以选择
目前为止最安全的、效率高
底层算法
分组密码的模式:
按位异或、对数据进行位运算、先将数据转换成二进制、按位异或操作符^、相同为真、不同为假、非0为假 按位异或一次为加密操作、按位异或两次为解密操作:a和b按位异或一次、结果再和b按位异或
ECB : 如果明文有规律、加密后的密文有规律不安全、go里不提供该接口、明文分组分成固定大小的块、如果最后一个分组不满足分组长度、则需要补位
CBC:密码链
问题:如何对字符串进行按位异或?解决了ECB的规律可查缺点、但是他不能并行处理、最后一个明文分组也需要填充 、初始化向量长度与分组长度相同
CFB:密文反馈模式
不需要填充最后一个分组、对密文进行加密
OFB:
不需要对最后一组进行填充
CTR计数器:
不需要对最后一组进行填充、不需要初始化向量
Go中的实现
官方文档中:
在创建aes或者是des接口时都是调用如下的方法、返回的block为一个接口
func NewCipher(key [] byte ) ( cipher . Block , error )
type Block interface {
// 返回加密字节块的大小
BlockSize() int
// 加密src的第一块数据并写入dst,src和dst可指向同一内存地址
Encrypt(dst, src []byte)
// 解密src的第一块数据并写入dst,src和dst可指向同一内存地址
Decrypt(dst, src []byte)
}
Block接口代表一个使用特定密钥的底层块加/解密器。它提供了加密和解密独立数据块的能力。
Block的Encrypt/Decrypt也能进行加密、但是只能加密第一组、因为aes的密钥长度为16、所以进行操作的第一组数据长度也是16
如果分组模式选择的是cbc
func NewCBCEncrypter(b Block, iv []byte) BlockMode 加密
func NewCBCDecrypter(b Block, iv []byte) BlockMode 解密
加密解密都调用同一个方法CryptBlocks()
并且cbc分组模式都会遇到明文最后一个分组的补充、所以会用到加密字节的大小
返回一个密码分组链接模式的、底层用b加密的BlockMode接口,初始向量iv的长度必须等于b的块尺寸。iv自己定义
返回的BlockMode同样也是一个接口类型
type BlockMode interface {
// 返回加密字节块的大小
BlockSize() int
// 加密或解密连续的数据块,src的尺寸必须是块大小的整数倍,src和dst可指向同一内存地址
CryptBlocks(dst, src []byte)
}
BlockMode接口代表一个工作在块模式(如CBC、ECB等)的加/解密器
返回的BlockMode其实是一个cbc的指针类型中的b和iv
# 加密流程:
1. 创建一个底层使用des/3des/aes的密码接口 "crypto/des" func NewCipher(key []byte) (cipher.Block, error) # -- des func NewTripleDESCipher(key []byte) (cipher.Block, error) # -- 3des "crypto/aes" func NewCipher(key []byte) (cipher.Block, error) # == aes
2. 如果使用的是cbc/ecb分组模式需要对明文分组进行填充
3. 创建一个密码分组模式的接口对象 - cbc func NewCBCEncrypter(b Block, iv []byte) BlockMode # 加密 - cfb func NewCFBEncrypter(block Block, iv []byte) Stream # 加密 - ofb - ctr
4. 加密, 得到密文
流程:
填充明文:
先求出最后一组中的字节数、创建新切片、长度为新切片、值也为切片的长度、然后利用bytes.Reapet将长度换成字节切片、追加到原明文中
//明文补充
func padPlaintText(plaintText []byte,blockSize int)[]byte{
//1、求出需要填充的个数
padNum := blockSize-len(plaintText) % blockSize
//2、对填充的个数进行操作、与原明文进行合并
newPadding := []byte{byte(padNum)}
newPlain := bytes.Repeat(newPadding,padNum)
plaintText = append(plaintText,newPlain...)
return plaintText
}
去掉填充数据:
拿去切片中的最后一个字节、得到尾部填充的字节个数、截取返回
//解密后的明文曲调补充的地方
func createPlaintText(plaintText []byte,blockSize int)[]byte{
//1、得到最后一个字节、并将字节转换成数字、去掉明文中此数字大小的字节
padNum := int(plaintText[len(plaintText)-1])
newPadding := plaintText[:len(plaintText)-padNum]
return newPadding
}
des加密:
1、创建一个底层使用des的密码接口、参数为秘钥、返回一个接口
2、对明文进行填充
3、创建一个cbc模式的接口、需要创建iv初始化向量、返回一个blockmode对象
4、加密、调用blockmode中的cryptBlock函数进行加密、参数为目标参数和源参数
//des利用分组模式cbc进行加密
func EncryptoText(plaintText []byte,key []byte)[]byte{
//1、创建des对象
cipherBlock,err := des.NewCipher(key)
if err != nil {
panic(err)
}
//2、对明文进行填充
newText := padPlaintText(plaintText,cipherBlock.BlockSize())
//3、选择分组模式、其中向量的长度必须与分组长度相同
iv := make([]byte,cipherBlock.BlockSize())
blockMode := cipher.NewCBCEncrypter(cipherBlock,iv)
//4、加密
blockMode.CryptBlocks(newText,newText)
return newText
}
des解密:
1、创建一个底层使用des的密码接口、参数为秘钥、返回一个接口
2、创建一个cbc模式的接口、需要创建iv初始化向量,返回一个blockmode对象
3、加密、调用blockmode中的cryptBlock函数进行解密、参数为目标参数和源参数
4、调用去掉填充数据的方法
//des利用分组模式cbc进行解密
func DecryptoText(cipherText []byte, key []byte)[]byte{
//1、创建des对象
cipherBlock,err := des.NewCipher(key)
if err != nil {
panic(err)
}
//2、创建cbc分组模式接口
iv := []byte("12345678")
blockMode := cipher.NewCBCDecrypter(cipherBlock,iv)
//3、解密
blockMode.CryptBlocks(cipherText,cipherText)
//4、将解密后的数据进行去除填充的数据
newText := clearPlaintText(cipherText,cipherBlock.BlockSize())
return newText
}
Main函数调用
func main(){
//需要进行加密的明文
plaintText := []byte("CBC--密文没有规律、经常使用的加密方式,最后一个分组需要填充,需要初始化向量" +
"(一个数组、数组的长度与明文分组相等、数据来源:负责加密的人提供,加解密使用的初始化向量必须相同)")
//密钥Key的长度需要与分组长度相同、且加密解密的密钥相同
key := []byte("1234abcd")
//调用加密函数
cipherText := EncryptoText(plaintText,key)
newPlaintText := DecryptoText(cipherText,key)
fmt.Println(string(newPlaintText))
}
AES加密解密相同、所以只需要调用一次方法就可以加密、调用两次则解密
推荐是用分组模式:cbc、ctr
aes利用分组模式cbc进行加密
//对明文进行补充
func paddingPlaintText(plaintText []byte , blockSize int ) []byte {
//1、求出分组余数
padNum := blockSize - len(plaintText) % blockSize
//2、将余数转换为字节切片、然后利用bytes.Repeat得出有该余数的大小的字节切片
padByte := bytes.Repeat([]byte{byte(padNum)},padNum)
//3、将补充的字节切片添加到原明文中
plaintText = append(plaintText,padByte...)
return plaintText
}
//aes加密
func encryptionText(plaintText []byte, key []byte) []byte {
//1、创建aes对象
block,err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、明文补充
newText := paddingPlaintText(plaintText,block.BlockSize())
//3、创建cbc对象
iv := []byte("12345678abcdefgh")
blockMode := cipher.NewCBCEncrypter(block,iv)
//4、加密
blockMode.CryptBlocks(newText,newText)
return newText
}
//解密后的去尾
func clearplaintText(plaintText []byte, blockSize int) []byte {
//1、得到最后一个字节、并转换成整型数据
padNum := int(plaintText[len(plaintText)-1])
//2、截取明文字节中去掉得到的整型数据之前的数据、此处出错、没有用len-padNum
newText := plaintText[:len(plaintText)-padNum]
return newText
}
//aes解密
func deCryptionText(crypherText []byte, key []byte ) []byte {
//1、创建aes对象
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、创建cbc对象
iv := []byte("12345678abcdefgh")
blockMode := cipher.NewCBCDecrypter(block,iv)
//3、解密
blockMode.CryptBlocks(crypherText,crypherText)
//4、去尾
newText := clearplaintText(crypherText,block.BlockSize())
return newText
}
func main(){
//需要进行加密的明文
plaintText := []byte("CBC--密文没有规律、经常使用的加密方式,最后一个分组需要填充,需要初始化向量")
//密钥Key的长度需要与分组长度相同、且加密解密的密钥相同
key := []byte("12345678abcdefgh")
//调用加密函数
cipherText := encryptionText(plaintText,key)
//调用解密函数
newPlaintText := deCryptionText(cipherText,key)
fmt.Println("解密后",string(newPlaintText))
}
//aes--ctr加密
func encryptionCtrText(plaintText []byte, key []byte) []byte {
//1、创建aes对象
block,err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、创建ctr对象,虽然ctr模式不需要iv,但是go中使用ctr时还是需要iv
iv := []byte("12345678abcdefgh")
stream := cipher.NewCTR(block,iv)
stream.XORKeyStream(plaintText,plaintText)
return plaintText
}
func main() {
//aes--ctr加密解密、调用两次即为解密、因为加密解密函数相同stream.XORKeyStream
ctrcipherText := encryptionCtrText(plaintText, key)
ctrPlaintText := encryptionCtrText(ctrcipherText,key)
fmt.Println("aes解密后", string(ctrPlaintText))
}
英文单词:
明文:plaintext 密文:ciphertext 填充:padding/fill 去掉clear 加密Encryption 解密Decryption