加密解密算法的C++实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1975 年 NBS 公布了这个算法,并说明要以它作为联邦信息加密标准,征求 各方意见。1976 年,DES 被采纳作为联邦标准,并授权在非机密的政府通信中使 用。DES 在银行,金融界崭露头角,随后得到广泛应用。
几十年过去了,虽然 DES 已不再作为数据加密标准,但它仍然值得研究和学 习。首先三重算法仍在 Internet 中广泛使用,如 PGP 和 S/MIME 中都使用了三重 DES 作为加密算法。其次,DES 是历史上最为成功的一种分组密码算法,它的使 用时间之长,范围之大,是其它分组密码算法不能企及的,而 DES 的成功则归因 于其精巧的设计和结构。
经过 P 变换后输出的比特串才是 32 比特的 f (Ri-1,Ki)。 ③S 盒的变换过程 任取一 S 盒。见图 3-3 所示。
5
在其输入 b1,b2,b3,b4,b5,b6 中,计算出 x=b1*2+b6, y=b5+b4*2+b3*4+b2*8, 再从 Si 表中查出 x 行,y 列的值 Sxy。将 Sxy 化为二进制,即得 Si 盒的输出。 (S 表如图 3-4 所示)
3、DES 算法简述
DES 算 法 处 理 的 数 据 对 象 是 一 组 64 比 特 的 明 文 串 。 设 该 明 文 串 为 m=m1m2…m64 (mi=0 或 1)。明文串经过 64 比特的密钥 K 来加密,最后生成长度 为 64 比特的密文 E。其加密算法过程如图 3-1 所示下:
图 3-1 算法加密流程图
R16 与 L16 合并成 64 位的比特串。值得注意的是 R16 一定要排在 L16 前面。 R16 与 L16 合并后成的比特串,经过置换 IP-1 后所得比特串的下标列表 3-2 如下:
经过置换 IP-1 后生成的比特串就是密文。 ②变换 f(Ri-1,Ki)的功能
它的功能是将 32 比特的输入再转化为 32 比特的输出。其过程如图 3-2 所示:
出于演示的目的,这里的 DES 加密限制为仅仅使用的前两轮情况。使用表 3-4IP 将明文 X 划分为两个分组(Lo,Ro),这样,Lo=ae1ba189 和 Ro=dc1f104。
32 位的 Ro 被扩展为 48 位 E(Ro),这样,E(Ro)=6f80fe8a17a9。 通过 E(Ro)与第一轮的密钥 K1 进行 XOR 运算,得到密钥依赖函数 f1,这样: f1=E百度文库Ro) K1=4821976f9a73 这个 48 位的 f1 首先被划分为 8 个 6 位分组,之后供给 8 个 Si 盒。从 S 盒 替换阶段得到计算输出结果为Ω1=a1ec961c。 利用表 3-5,Ω1 的置换位置为 P(Ω1)=2 吧 536c。将 P(Ω1)与 Lo 作模 2 加,得到:R1=P(Ω1) Lo=85baf2e5 由此 L1=Ro,因此 L1=dc1f10f4。 现在考虑第二轮加密。借助表 3-3 扩展到 R1,得到 E(R1)=c0bdf57a570b。
8
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 };
上面程序主要定义了初始置换表 IP_Table。初始置换在第一轮运算之前执行。 将常量 IP_Table 看作是一个表结构。此表应该从左向右读。例如,初始置换把明 文的第 58 位换到第 1 位的位置,把第 50 位换到第 2 位的位置,把第 42 位换到 第 3 位的位置。
二、DES 算法的 C++实现................................................................8 1、运行环境..................................................................................8 2、功能说明..................................................................................8 3、程序函数说明......................................................................... 8 4、程序运行效果图................................................................... 19
7
将 E(R1)与 K2 做 XOR 运算,得到: f2=E(R1) K2=1a2c28ade043 S 盒的替换操作得到 32 位输出Ω2,因此,Ω2=1ebcebdf。使用表 3-4,计
算置换 P(Ω2),得到 P(Ω2)=5f3e39f7,因此,经过两轮计算后得到的右半部分 输出 R2=P(Ω2) L1=83212903
/*源文件:DES.cpp*/ /*本程序为本人实验程序*/ #include <stdio.h> #include <memory.h> #include <string.h> // 初始置换表 const static char IP_Table[64] = {
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
3
3.1 算法过程的具体分析
①IP 置换 对 DES 算法加密过程图示的说明如下:待加密的 64 比特明文串 m,经过 IP
置换后,得到的比特串的下标列表如表 3-1 下:
该比特串被分为 32 位的 Lo 和 32 位的 Ro 两部分。Ro 子密钥 K1(子密钥的 生成将在后面讲)经过变换 f(Ro,K1() f 变换将在下面讲)输出 32 位的比特串 f1,f1 与 Lo 做不进位的二进制加法运算。运算规则为:
与其他分组加密方案一样,加密函数使用了两个输入:要被加密的 64 位明文 和 56 位密钥。DES 的基本构建是对明文分组的进行置换和替换的适宜组合(16 次)。通过 S-盒查表完成替换。除了以相反次序处理密钥次序表之外,加密和解 密使用了相同的算法。
明文分组 X 组首先按初始置换 IP 表进行置换,得到 Xo=IP(X)=(Lo,Ro)。经 过 16 轮的置换、XOR 和替换之后,反向置换 IP^-1 生成密文分组。如果使用 Xi=(Li,Ri)表示第 i 轮加密结果,那么有:
2、DES 算法原理
DES 是一个对称分组密码,它使用 56 位密钥操作 64 位分组。DES 以 64 位分 组形式加密数据。算法的输入是 64 位分组的明文,算法的输出是 64 位分组的密 文,明文到密文经过了 16 轮一致的运算。通过剔除 8 个奇偶校验位,即忽略给 定 64 位密钥中的每一个第 8 位,从而得到密钥长度为 56 位。
4
对 f 变换说明如下:输入 Ri-1(32 比特)经过变换 E 后,膨胀为 48 比特。膨 胀后的比特串的下标列表 3-3 如下:
膨胀后的比特串分为 8 组,每组 6 比特。各组经过各自的 S 盒后,又变为 4 比特(具体过程见后),合并后又成为 32 比特。该 32 比特经过 P 变换后,其下标 列表 3-4 如下:
f1 与 Lo 做不进位的二进制加法运算后的结果赋给 R1,Ro 则原封不动的赋 给 L1。L1 与 Ro 又做与以上完全相同的运算,生成 L2,R2…… 一共经过 16 次 运算。最后生成 R16 和 L16。其中 R16 为 L15 与 f(R15,K16)做不进位二进制加 法运算的结果,L16 是 R15 的直接赋值。
C1、D1 分别循环左移 LS2 位,再合并,经过 PC-2,生成子密钥 K2……依次 类推直至生成子密钥 K16。
注意:Lsi (I =1,2,….16)的数值是不同的。具体见下表:
3.2 具体示例分析
假设 64 位明文为 X=3570e2f1ba4682c7,密钥 K=581fbc94d3a452ea,包括 8 个奇偶校验位,前 2 轮的密钥分别是 K1=27a169e58dda 和 K2=da91ddd76748。
三、小结........................................................................................... 21
1
一、DES 算法的概述
1、DES 简介
DES 是 Data Encryption Standard(数据加密标准)的缩写。1974 年,IBM 向 NBS 提交了由 Tuchman 博士领导的小组设计并经改造的 Luciffer 算法。NSA (美国国家安全局)组织专家对该算法进行了鉴定,使其成为 DES 的基础。
Li=Ri-1 Ri=Li-1⊕ f(Ri-1,Ki) DES 的第 i 轮加密如图 2-1 所示。从加密公式中能够导出如下的解密过程: Ri-1=Li Li-1=Ri ⊕ f(Ri-1,Ki)= Ri⊕f(Li,Ki)
2
Li-1
Ri-1
Ki
f(Ri-1,Ki)
Li
Ri
图 2-1 DES 算法的第 i 轮过程
④子密钥的生成 64 比特的密钥生成 16 个 48 比特的子密钥。子密钥生成过程具体解释如下: 64 比特的密钥 K,经过 PC-1 后,生成 56 比特的串。其下标如表 3-5 所示:
6
该比特串分为长度相等的比特串 C0 和 D0。然后 C0 和 D0 分别循环左移 1 位, 得到 C1 和 D1。C1 和 D1 合并起来生成 C1D1。C1D1 经过 PC-2 变换后即生成 48 比特的 K1。K1 的下标列表 3-6 为:
第二轮计算后的左半部分输出立刻可以得到: L2=R1=85baf2e5 在这两轮密码系统中,R2 与 L2 的拼接称作预输出分组。之后对于输出分组 应用表 3-7 所示的反向置换,这样,第二轮结束后 DES 算法的输出就成为密文 Y: Y=IP^-1(R2||L2)=d7698224283e0aea
网络与信息安全 Introduction to Network and Security
——DES 加密解密算法的 C++实现
2011 年 10 月
目录
一、DES 算法的概述........................................................................ 2 1、DES 简介...................................................................................2 2、DES 算法原理.......................................................................... 2 3、DES 算法简述.......................................................................... 3 3.1 算法过程的具体分析...................................................... 4 3.2 具体示例分析..................................................................7
二、DES 算法的 C++实现
1、运行环境
本系统采用 Microsoft Visual Studio 2005 软件作为开发工具
2、功能说明
用 C++语言实现了 DES 算法的加密解密过程。对已输入的明文和密钥进行加 密并输出密文;对已输入的密文和密钥进行解密,并输出明文。
3、程序函数说明
在本次设计中,具体讲解 DES 加密和解密程序,并在程序中详细对程序进行 了分析, 以下是 DES 加密和解密程序设计的详细过程以及分析说明。
几十年过去了,虽然 DES 已不再作为数据加密标准,但它仍然值得研究和学 习。首先三重算法仍在 Internet 中广泛使用,如 PGP 和 S/MIME 中都使用了三重 DES 作为加密算法。其次,DES 是历史上最为成功的一种分组密码算法,它的使 用时间之长,范围之大,是其它分组密码算法不能企及的,而 DES 的成功则归因 于其精巧的设计和结构。
经过 P 变换后输出的比特串才是 32 比特的 f (Ri-1,Ki)。 ③S 盒的变换过程 任取一 S 盒。见图 3-3 所示。
5
在其输入 b1,b2,b3,b4,b5,b6 中,计算出 x=b1*2+b6, y=b5+b4*2+b3*4+b2*8, 再从 Si 表中查出 x 行,y 列的值 Sxy。将 Sxy 化为二进制,即得 Si 盒的输出。 (S 表如图 3-4 所示)
3、DES 算法简述
DES 算 法 处 理 的 数 据 对 象 是 一 组 64 比 特 的 明 文 串 。 设 该 明 文 串 为 m=m1m2…m64 (mi=0 或 1)。明文串经过 64 比特的密钥 K 来加密,最后生成长度 为 64 比特的密文 E。其加密算法过程如图 3-1 所示下:
图 3-1 算法加密流程图
R16 与 L16 合并成 64 位的比特串。值得注意的是 R16 一定要排在 L16 前面。 R16 与 L16 合并后成的比特串,经过置换 IP-1 后所得比特串的下标列表 3-2 如下:
经过置换 IP-1 后生成的比特串就是密文。 ②变换 f(Ri-1,Ki)的功能
它的功能是将 32 比特的输入再转化为 32 比特的输出。其过程如图 3-2 所示:
出于演示的目的,这里的 DES 加密限制为仅仅使用的前两轮情况。使用表 3-4IP 将明文 X 划分为两个分组(Lo,Ro),这样,Lo=ae1ba189 和 Ro=dc1f104。
32 位的 Ro 被扩展为 48 位 E(Ro),这样,E(Ro)=6f80fe8a17a9。 通过 E(Ro)与第一轮的密钥 K1 进行 XOR 运算,得到密钥依赖函数 f1,这样: f1=E百度文库Ro) K1=4821976f9a73 这个 48 位的 f1 首先被划分为 8 个 6 位分组,之后供给 8 个 Si 盒。从 S 盒 替换阶段得到计算输出结果为Ω1=a1ec961c。 利用表 3-5,Ω1 的置换位置为 P(Ω1)=2 吧 536c。将 P(Ω1)与 Lo 作模 2 加,得到:R1=P(Ω1) Lo=85baf2e5 由此 L1=Ro,因此 L1=dc1f10f4。 现在考虑第二轮加密。借助表 3-3 扩展到 R1,得到 E(R1)=c0bdf57a570b。
8
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 };
上面程序主要定义了初始置换表 IP_Table。初始置换在第一轮运算之前执行。 将常量 IP_Table 看作是一个表结构。此表应该从左向右读。例如,初始置换把明 文的第 58 位换到第 1 位的位置,把第 50 位换到第 2 位的位置,把第 42 位换到 第 3 位的位置。
二、DES 算法的 C++实现................................................................8 1、运行环境..................................................................................8 2、功能说明..................................................................................8 3、程序函数说明......................................................................... 8 4、程序运行效果图................................................................... 19
7
将 E(R1)与 K2 做 XOR 运算,得到: f2=E(R1) K2=1a2c28ade043 S 盒的替换操作得到 32 位输出Ω2,因此,Ω2=1ebcebdf。使用表 3-4,计
算置换 P(Ω2),得到 P(Ω2)=5f3e39f7,因此,经过两轮计算后得到的右半部分 输出 R2=P(Ω2) L1=83212903
/*源文件:DES.cpp*/ /*本程序为本人实验程序*/ #include <stdio.h> #include <memory.h> #include <string.h> // 初始置换表 const static char IP_Table[64] = {
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
3
3.1 算法过程的具体分析
①IP 置换 对 DES 算法加密过程图示的说明如下:待加密的 64 比特明文串 m,经过 IP
置换后,得到的比特串的下标列表如表 3-1 下:
该比特串被分为 32 位的 Lo 和 32 位的 Ro 两部分。Ro 子密钥 K1(子密钥的 生成将在后面讲)经过变换 f(Ro,K1() f 变换将在下面讲)输出 32 位的比特串 f1,f1 与 Lo 做不进位的二进制加法运算。运算规则为:
与其他分组加密方案一样,加密函数使用了两个输入:要被加密的 64 位明文 和 56 位密钥。DES 的基本构建是对明文分组的进行置换和替换的适宜组合(16 次)。通过 S-盒查表完成替换。除了以相反次序处理密钥次序表之外,加密和解 密使用了相同的算法。
明文分组 X 组首先按初始置换 IP 表进行置换,得到 Xo=IP(X)=(Lo,Ro)。经 过 16 轮的置换、XOR 和替换之后,反向置换 IP^-1 生成密文分组。如果使用 Xi=(Li,Ri)表示第 i 轮加密结果,那么有:
2、DES 算法原理
DES 是一个对称分组密码,它使用 56 位密钥操作 64 位分组。DES 以 64 位分 组形式加密数据。算法的输入是 64 位分组的明文,算法的输出是 64 位分组的密 文,明文到密文经过了 16 轮一致的运算。通过剔除 8 个奇偶校验位,即忽略给 定 64 位密钥中的每一个第 8 位,从而得到密钥长度为 56 位。
4
对 f 变换说明如下:输入 Ri-1(32 比特)经过变换 E 后,膨胀为 48 比特。膨 胀后的比特串的下标列表 3-3 如下:
膨胀后的比特串分为 8 组,每组 6 比特。各组经过各自的 S 盒后,又变为 4 比特(具体过程见后),合并后又成为 32 比特。该 32 比特经过 P 变换后,其下标 列表 3-4 如下:
f1 与 Lo 做不进位的二进制加法运算后的结果赋给 R1,Ro 则原封不动的赋 给 L1。L1 与 Ro 又做与以上完全相同的运算,生成 L2,R2…… 一共经过 16 次 运算。最后生成 R16 和 L16。其中 R16 为 L15 与 f(R15,K16)做不进位二进制加 法运算的结果,L16 是 R15 的直接赋值。
C1、D1 分别循环左移 LS2 位,再合并,经过 PC-2,生成子密钥 K2……依次 类推直至生成子密钥 K16。
注意:Lsi (I =1,2,….16)的数值是不同的。具体见下表:
3.2 具体示例分析
假设 64 位明文为 X=3570e2f1ba4682c7,密钥 K=581fbc94d3a452ea,包括 8 个奇偶校验位,前 2 轮的密钥分别是 K1=27a169e58dda 和 K2=da91ddd76748。
三、小结........................................................................................... 21
1
一、DES 算法的概述
1、DES 简介
DES 是 Data Encryption Standard(数据加密标准)的缩写。1974 年,IBM 向 NBS 提交了由 Tuchman 博士领导的小组设计并经改造的 Luciffer 算法。NSA (美国国家安全局)组织专家对该算法进行了鉴定,使其成为 DES 的基础。
Li=Ri-1 Ri=Li-1⊕ f(Ri-1,Ki) DES 的第 i 轮加密如图 2-1 所示。从加密公式中能够导出如下的解密过程: Ri-1=Li Li-1=Ri ⊕ f(Ri-1,Ki)= Ri⊕f(Li,Ki)
2
Li-1
Ri-1
Ki
f(Ri-1,Ki)
Li
Ri
图 2-1 DES 算法的第 i 轮过程
④子密钥的生成 64 比特的密钥生成 16 个 48 比特的子密钥。子密钥生成过程具体解释如下: 64 比特的密钥 K,经过 PC-1 后,生成 56 比特的串。其下标如表 3-5 所示:
6
该比特串分为长度相等的比特串 C0 和 D0。然后 C0 和 D0 分别循环左移 1 位, 得到 C1 和 D1。C1 和 D1 合并起来生成 C1D1。C1D1 经过 PC-2 变换后即生成 48 比特的 K1。K1 的下标列表 3-6 为:
第二轮计算后的左半部分输出立刻可以得到: L2=R1=85baf2e5 在这两轮密码系统中,R2 与 L2 的拼接称作预输出分组。之后对于输出分组 应用表 3-7 所示的反向置换,这样,第二轮结束后 DES 算法的输出就成为密文 Y: Y=IP^-1(R2||L2)=d7698224283e0aea
网络与信息安全 Introduction to Network and Security
——DES 加密解密算法的 C++实现
2011 年 10 月
目录
一、DES 算法的概述........................................................................ 2 1、DES 简介...................................................................................2 2、DES 算法原理.......................................................................... 2 3、DES 算法简述.......................................................................... 3 3.1 算法过程的具体分析...................................................... 4 3.2 具体示例分析..................................................................7
二、DES 算法的 C++实现
1、运行环境
本系统采用 Microsoft Visual Studio 2005 软件作为开发工具
2、功能说明
用 C++语言实现了 DES 算法的加密解密过程。对已输入的明文和密钥进行加 密并输出密文;对已输入的密文和密钥进行解密,并输出明文。
3、程序函数说明
在本次设计中,具体讲解 DES 加密和解密程序,并在程序中详细对程序进行 了分析, 以下是 DES 加密和解密程序设计的详细过程以及分析说明。