1、DES 算 法 及 其 在 VC+6.0 下 的 实 现 (上 )摘 要 :本 文 介 绍 了 一 种 国 际 上 通 用 的 加 密 算 法 DES 算 法 的 原 理 , 并 给 出 了 在VC+6.0 语 言 环 境 下 实 现 的 源 代 码 。 最 后 给 出 一 个 示 例 , 以 供 参 考 。关 键 字 : DES 算 法 、 明 文 、 密 文 、 密 钥 、 VC;本 文 程 序 运 行 效 果 图 如 下 :正 文 :当 今 社 会 是 信 息 化 的 社 会 。 为 了 适 应 社 会 对 计 算 机 数 据 安 全 保 密 越 来 越 高 的要 求 , 美 国 国 家
2、 标 准 局 (NBS)于 1997 年 公 布 了 一 个 由 IBM 公 司 研 制 的 一种 加 密 算 法 , 并 且 确 定 为 非 机 要 部 门 使 用 的 数 据 加 密 标 准 , 简 称DES(Data Encrypton Standard)。 自 公 布 之 日 起 , DES 算 法 作 为 国 际 上商 用 保 密 通 信 和 计 算 机 通 信 的 最 常 用 算 法 , 一 直 活 跃 在 国 际 保 密 通 信 的 舞 台上 , 扮 演 了 十 分 突 出 的 角 色 。 现 将 DES 算 法 简 单 介 绍 一 下 , 并 给 出 实 现DES 算 法 的
3、VC 源 代 码 。DES 算 法 由 加 密 、 解 密 和 子 密 钥 的 生 成 三 部 分 组 成 。一 加 密DES 算 法 处 理 的 数 据 对 象 是 一 组 64 比 特 的 明 文 串 。 设 该 明 文 串 为m=m1m2m64 (mi=0 或 1)。 明 文 串 经 过 64 比 特 的 密 钥 K 来 加 密 , 最后 生 成 长 度 为 64 比 特 的 密 文 E。 其 加 密 过 程 图 示 如 下 :DES 算 法 加 密 过 程对 DES 算 法 加 密 过 程 图 示 的 说 明 如 下 : 待 加 密 的 64 比 特 明 文 串 m, 经过 IP 置
4、换 后 , 得 到 的 比 特 串 的 下 标 列 表 如 下 :58 50 42 34 26 18 10 260 52 44 36 28 20 12 462 54 46 38 30 22 14 664 56 48 40 32 24 16 857 49 41 33 25 17 9 159 51 43 35 27 19 11 361 53 45 37 29 21 13 5IP63 55 47 39 31 23 15 7该 比 特 串 被 分 为 32 位 的 L0 和 32 位 的 R0 两 部 分 。 R0 子 密 钥 K1(子 密钥 的 生 成 将 在 后 面 讲 )经 过 变 换 f(R0
5、,K1)( f 变 换 将 在 下 面 讲 ) 输 出 32位 的 比 特 串 f1,f1 与 L0 做 不 进 位 的 二 进 制 加 法 运 算 。 运 算 规 则 为 :f1 与 L0 做 不 进 位 的 二 进 制 加 法 运 算 后 的 结 果 赋 给 R1, R0 则 原 封 不 动 的赋 给 L1。 L1 与 R0 又 做 与 以 上 完 全 相 同 的 运 算 , 生 成 L2, R2 一 共经 过 16 次 运 算 。 最 后 生 成 R16 和 L16。 其 中 R16 为 L15 与 f(R15,K16)做 不 进 位 二 进 制 加 法 运 算 的 结 果 , L16
6、是 R15 的 直 接 赋 值 。R16 与 L16 合 并 成 64 位 的 比 特 串 。 值 得 注 意 的 是 R16 一 定 要 排 在 L16前 面 。 R16 与 L16 合 并 后 成 的 比 特 串 , 经 过 置 换 IP-1 后 所 得 比 特 串 的 下标 列 表 如 下 :40 8 48 16 56 24 64 3239 7 47 15 55 23 63 3138 6 46 14 54 22 62 3037 5 45 13 53 21 61 29IP-136 4 44 12 52 20 60 2835 3 43 11 51 19 59 2734 2 42 10 50
7、18 58 2633 1 41 9 49 17 57 25经 过 置 换 IP-1 后 生 成 的 比 特 串 就 是 密 文 e.。下 面 再 讲 一 下 变 换 f(Ri-1,Ki)。它 的 功 能 是 将 32 比 特 的 输 入 再 转 化 为 32 比 特 的 输 出 。 其 过 程 如 图 所 示 :对 f 变 换 说 明 如 下 : 输 入 Ri-1(32 比 特 )经 过 变 换 E 后 , 膨 胀 为 48 比 特 。膨 胀 后 的 比 特 串 的 下 标 列 表 如 下 :32 1 2 3 4 54 5 6 7 8 98 9 10 11 12 1312 13 14 15 1
8、6 1716 17 18 19 20 2120 21 22 23 24 2524 25 26 27 28 29E:28 29 30 31 32 31膨 胀 后 的 比 特 串 分 为 8 组 , 每 组 6 比 特 。 各 组 经 过 各 自 的 S 盒 后 , 又 变为 4 比 特 (具 体 过 程 见 后 ), 合 并 后 又 成 为 32 比 特 。 该 32 比 特 经 过 P 变换 后 , 其 下 标 列 表 如 下 :16 7 20 2129 12 28 171 15 23 265 18 31 102 8 24 1432 27 3 919 13 30 6P:22 11 4 25经
9、过 P 变 换 后 输 出 的 比 特 串 才 是 32 比 特 的 f (Ri-1,Ki)。下 面 再 讲 一 下 S 盒 的 变 换 过 程 。 任 取 一 S 盒 。 见 图 :在 其 输 入 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 表 如 图 所 示 )至 此 , DES 算 法 加 密 原 理 讲 完 了 。 在 VC+6.0 下 的 程 序 源 代 码 为 :f
10、or(i=1;i=64;i+)m1i=mipi-1;/64 位 明 文 串 输 入 , 经 过IP 置 换 。下 面 进 行 迭 代 。 由 于 各 次 迭 代 的 方 法 相 同 只 是 输 入 输 出 不 同 , 因 此 只 给 出 其中 一 次 。 以 第 八 次 为 例 :/进 行 第 八 次 迭 代 。 首 先 进 行 S 盒 的 运 算 , 输 入 32 位 比 特 串 。for(i=1;i=48;i+)/经 过 E 变 换 扩 充 , 由 32 位 变 为 48位RE1i=R7Ei-1;for(i=1;i=48;i+)/与 K8 按 位 作 不 进 位 加 法 运 算RE1i=R
11、E1i+K8i;for(i=1;i=48;i+)if(RE1i=2)RE1i=0;for(i=1;i7;i+)/48 位 分 成 8 组s11i=RE1i;s21i=RE1i+6;s31i=RE1i+12;s41i=RE1i+18;s51i=RE1i+24;s61i=RE1i+30;s71i=RE1i+36;s81i=RE1i+42;/下 面 经 过 S 盒 , 得 到 8 个 数 。S1,s2,s3,s4,s5,s6,s7,s8 分 别 为 S 表s1=s1s116+s111*2s115+s114*2+s113*4+s112*8;s2=s2s216+s211*2s215+s214*2+s21
12、3*4+s212*8;s3=s3s316+s311*2s315+s314*2+s313*4+s312*8;s4=s4s416+s411*2s415+s414*2+s413*4+s412*8;s5=s5s516+s511*2s515+s514*2+s513*4+s512*8;s6=s6s616+s611*2s615+s614*2+s613*4+s612*8;s7=s7s716+s711*2s715+s714*2+s713*4+s712*8;s8=s8s816+s811*2s815+s814*2+s813*4+s812*8;for(i=0;i8;i+)/8 个 数 变 换 输 出 二 进 制for
13、(j=1;j5;j+)tempj=si+1%2;si+1=si+1/2;for(j=1;j5;j+)f4*i+j=temp5-j;for(i=1;i33;i+)/经 过 P 变 换frki=fPi-1;/S 盒 运 算 完 成for(i=1;i33;i+)/左 右 交 换L8i=R7i;for(i=1;i33;i+)/R8 为 L7 与 f(R,K)进 行 不 进 位 二 进制 加 法 运 算 结 果R8i=L7i+frki;if(R8i=2)R8i=0;其 它 各 次 迭 代 类 似 , 可 以 依 此 类 推 。二 子 密 钥 的 生 成64 比 特 的 密 钥 生 成 16 个 48 比 特 的 子 密 钥 。 其 生 成 过 程 见 图 :子 密 钥 生 成 过 程 具 体 解 释 如 下 :64 比 特 的 密 钥 K, 经 过 PC-1 后 , 生 成 56 比 特 的 串 。 其 下 标 如 表 所 示 :57 49 41 33 25 17 91 58 50 42 34 26 1810 2 59 51 43 35 2719 11 3 60 52 44 3663 55 47 39 31 23 15PC-17 62 54 46 38 30 22