对称密钥

常用的几种非对称加密算法

不问归期 提交于 2019-12-02 12:00:27
文章目录 `1、RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)` `2、DSA 签名` 相对对称加密而言,无需拥有同一组密钥,非对称加密是一种“信息公开的密钥交换协议”。非对称加密需要公开密钥和私有密钥两组密钥,公开密钥和私有密钥是配对起来的,也就是说使用公开密钥进行数据加密,只有对应的私有密钥才能解密。这两个密钥是数学相关,用某用户密钥加密后的密文,只能使用该用户的加密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个密钥性质。这里把公开的密钥为公钥,不公开的密钥为私钥。算法代表:RSA,DSA。 RSA 能同时用于加密和数字签名,而DSA只能用于签名,本文重点讲解RSA。 1、RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman) 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。 这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙

密钥,私钥,公钥的区分

拈花ヽ惹草 提交于 2019-12-02 11:59:29
首先明确几个基本概念: 1、密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。 2、公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。 3、私钥,如上,用来解密公钥加密的数据。 4、摘要,对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。 5、签名,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。(看最下面的一部分就明白了) 6、签名验证,数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。 上面实际上介绍了加密解密和数字签名两个概念和实现过程,二者的过程正好是相反的。 公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),将其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。 使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密

DES与3DES 加解密实例(c++)

我与影子孤独终老i 提交于 2019-12-02 11:43:09
DES与3DES 加解密实例(c++) ###DES原理: DES算法是一种对称密码算法,也是一种分组加密的算法,以64位分组对数 据加密的,其密钥长度为64位,密钥事实上是56位参与DES运算(第8、16、24、 32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和 56位的密钥按位替代或交换的方法形成密文组。 DES算法的主要流程如下图所示 。 1、 IP置换 IP置换目的是将输入的64位数据块按位重新组合,并把输出分为L0、R0两部分, 每部分各长32位 2、密码置换 DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位 密钥。在DES的每一轮中,从56位密钥循环左移再置换产生出不同的48位子密钥。 总共16轮,所以有16个子密钥。 4、E扩展置换 扩展置置换目标是IP置换后获得的右半部分R0,将32位输入扩展为48位(分为4 位×8组)输出。 扩展置换目的有两个:生成与密钥相同长度的数据以进行异或运算;提供更长的结 果,在后续的替代运算中可以进行压缩。 5、S盒代替 压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送人S盒,进行替 代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分 为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。 5、 P盒置换

DES算法与四种加密模式的代码实现(C++语言)

时光总嘲笑我的痴心妄想 提交于 2019-12-02 08:49:00
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/Love_Irelia97/article/details/102597577 本文主要是对《信息安全技术》的DES算法实验作业的一些总结,不会着重地介绍算法原理,而会在算法实现过程中给出自己的理解 (因为有些部分我也不知道正确与否,如有错误请指教)。 文章中出现的原理介绍和配图,均参考自其它博客,相关链接将在文中给出。 另外,文中的代码都是根据内容截取的,若想查看 完整代码 ,请参考 DES - github 一、DES算法简介(参考自 DES算法实例详解 ) DES(Data Encryption Standard)是一种用于电子数据加密的对称密钥块加密算法。 它以64bit一组的明文 (Input) 作为算法的输入,通过一系列复杂的操作,输出同样64bit长度的密文 (Output) 。DES 同样采用64位密钥 (Key) ,但由于每8bit中的最后1位用于奇偶校验,实际有效密钥长度为56bit ( Tips:输入的Key依然是64bit,只是在映射时不对每个字节最后1位进行处理,所以变为了56bit ) 。 DES 使用加密密钥定义变换过程,因此算法认为只有持有加密所用的密钥的用户才能解密密文

DES算法与四种加密模式的代码实现(C++语言)

人盡茶涼 提交于 2019-12-02 08:46:37
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/Love_Irelia97/article/details/102597577 本文主要是对《信息安全技术》的DES算法实验作业的一些总结,不会着重地介绍算法原理,而会在算法实现过程中给出自己的理解 (因为有些部分我也不知道正确与否,如有错误请指教)。 文章中出现的原理介绍和配图,均参考自其它博客,相关链接将在文中给出。 另外,文中的代码都是根据内容截取的,若想查看 完整代码 ,请参考 DES - github 一、DES算法简介(参考自 DES算法实例详解 ) DES(Data Encryption Standard)是一种用于电子数据加密的对称密钥块加密算法。 它以64bit一组的明文 (Input) 作为算法的输入,通过一系列复杂的操作,输出同样64bit长度的密文 (Output) 。DES 同样采用64位密钥 (Key) ,但由于每8bit中的最后1位用于奇偶校验,实际有效密钥长度为56bit ( Tips:输入的Key依然是64bit,只是在映射时不对每个字节最后1位进行处理,所以变为了56bit ) 。 DES 使用加密密钥定义变换过程,因此算法认为只有持有加密所用的密钥的用户才能解密密文

加密、解密、数字签名和数字证书详解

大兔子大兔子 提交于 2019-12-02 03:22:31
1. 概述 随着电子商务的迅速发展,信息安全已成为焦点问题之一,尤其是网上支付和网络银行对信息安全的要求显得更为突出。为了能在因特网上开展安全的电子商务活动,公开密钥基础设施(PKI, Public Key Infrastructure)逐步在国内外得到广泛应用。我们是否真的需要PKI,PKI究竟有什么用?下面通过一个案例一步步地来剖析这个问题。 2. 案例 2.1 案例内容 甲想将一份合同文件通过Internet发给远在国外的乙,此合同文件对双方非常重要,不能有丝毫差错,而且此文件绝对不能被其他人得知其内容。如何才能实现这个合同的安全发送? 2.2 问题1 问题1 :最自然的想法是,甲必须对文件加密才能保证不被其他人查看其内容。那么,到底应该用什么加密技术,才能使合同传送既安全又快速呢?   可以采用一些成熟的 对称加密算法 ,如DES、3DES、RC5等对文件加密。对称加密采用了对称密码编码技术, 对称加密的特点是文件加密和解密使用相同的密钥 ,即加密密钥也可以用做解密密钥,这种方法在密码学中叫做对称加密算法, 2.3 问题2 问题2: 如果黑客截获此文件,是否用同一算法就可以解密此文件呢?   不可以,因为加密和解密均需要两个组件:加密算法和对称密钥,加密算法需要用一个对称密钥来解密,黑客并不知道此密钥。 2.4 问题3 问题3: 既然黑客不知密钥

密码技术之认证

人走茶凉 提交于 2019-12-02 03:11:11
第二部分:认证   当比较两条消息是否一致时,我们不必直接对比消息本身的内容,只要对比它们的“指纹”就行了。   一、单向散列函数(one-way hash function)     单向散列函数也称为消息摘要函数(message digest function)、哈希函数或者杂凑函数。     单向散列函数有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash value)也称为消息摘要(message digest)或者指纹。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。所谓完整性是指有没有被篡改,或称为一致性。     这里的消息可以是文字,图片或者文件等。并且散列值的长度和消息的长度无关,无论消息的大小是多少,散列函数都会计算出固定长度的散列值。如SHA-256单向散列函数,它计算出的长度永远 是256bit。   单项散列函数的性质   (1)、根据任意长度的消息计算出固定长度的散列值   (2)、能够快速计算出散列值   (3)、消息不同,散列值也不相同(哪怕1bit,散列值也不同),难以发现碰撞的性质称为抗碰撞性,密码技术中所使用的单向单列函数,都具备抗碰撞性。也就是说难以找到两条消息的散列值相同。   (4)、具备单向性,指无法通过散列值反算出消息的性质。破镜不能重圆   单项散列函数的实际应用  

非对称加密RSA的C#实现

孤人 提交于 2019-12-02 02:57:28
1.对称加密算法 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。 对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥, 一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密, 不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。 密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。 常用对称加密:DES、3DES、AES等 (代码后续添加) 2.非对称加密算法 非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。 比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。 与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。 常用非对称加密:DSA、RSA等 目前C

AES 加密算法的原理详解

本秂侑毒 提交于 2019-12-02 01:56:27
AES 加密算法的原理详解 本教程摘选自 https://blog.csdn.net/qq_28205153/article/details/55798628 的原理部分。 AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的作用与意义: · 明文P 没有经过加密的数据。 · 密钥K 用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。 · AES加密函数 设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。 · 密文C 经加密函数处理后的数据 · AES解密函数 设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。

C# AES的128位、192位、256位加密

泪湿孤枕 提交于 2019-12-02 01:52:48
C# AES的128位、192位、256位加密   AES加密原理,这里就不解释了,自行百度。这里主要细说AES的CBC加密模式下的128位、192位、256位加密区别,参考 对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB) 。 这三种的区别,主要来自于密钥的长度,16位密钥=128位,24位密钥=192位,32位密钥=256位。   废话不多说,直接上图。    16位密钥对应128位加密          24位密钥对应192位加密             32位密钥对应256位加密               其中,向量都必须是16位。        最后贴出封装的加解密代码:                //AES加密      public static string AesEncrypt(string value, string key, string iv = "") { if (string.IsNullOrEmpty(value)) return string.Empty; if (key == null) throw new Exception("未将对象引用设置到对象的实例。"); if (key.Length < 16) throw new Exception("指定的密钥长度不能少于16位。"); if (key.Length > 32)