S盒的计算过程简介

代码实现(C#)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace S_box
{class Program{//S 盒的简单实现,利用二维数组来存储 每一个S 盒static string box(string attr){int[,] s1 = new int[4, 16] {{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7} ,{0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8} ,{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0} ,{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}};int[,] s2 = new int[4, 16] {{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10} ,{3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5} ,{0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15} ,{13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}};int[,] s3 = new int[4, 16] {{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8} ,{13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1} ,{13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7} ,{1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}};int[,] s4 = new int[4, 16] {{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15} ,{13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9} ,{10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4} ,{3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}};int[,] s5 = new int[4, 16] {{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9} ,{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6} ,{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14} ,{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}};int[,] s6 = new int[4, 16] {{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11} ,{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8} ,{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6} ,{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}};int[,] s7 = new int[4, 16] {{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1} ,{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6} ,{ 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2} ,{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}};int[,] s8 = new int[4, 16] {{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7} ,{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2} ,{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8} ,{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}};string end_attr = ""; // 用来存储经过一个S 盒后 输出的结果;//将长度为48 的字符串分割为长度为6 的8 个子串int one = 0;string[] splitattr = new string[8];// splitattr 存储8 个子串for (int i = 0; i < 48; i++){splitattr[one] = splitattr[one] + attr[i];if (i % 6 == 5){one = one + 1;}}// 经过一个S 盒所需要的变换for (int i = 0; i < 8; i++){string attrone = splitattr[i];string heng = attrone[0].ToString() + attrone[5]; //取子串的第一位和最后一位string zhong = attrone[1].ToString() + attrone[2] + attrone[3] + attrone[4]; // 取中间的四位int comeout = 0; // 通过S盒确定的十进制数switch (i){case 0:comeout = s1[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;case 1:comeout = s2[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;case 2:comeout = s3[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;case 3:comeout = s4[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;case 4:comeout = s5[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;case 5:comeout = s6[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;case 6:comeout = s7[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;case 7:comeout = s8[Convert.ToInt32(heng, 2), Convert.ToInt32(zhong, 2)];break;}//将结果转换为二进制字符串end_attr = end_attr + Convert.ToString(comeout, 2).PadLeft(4, '0');}return end_attr;}static void Main(string[] args){string attr = "";Console.Write("请输入二进制字符串(48位):");attr = Console.ReadLine();if (attr.Length != 48){Console.WriteLine("字符串长度有问题!!!");}else{string one = box(attr);Console.WriteLine(one);}Console.ReadKey();}}
}

DES密码 中 S盒的代码实现相关推荐

  1. DES密码算法实现(C语言)

    算法介绍 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法. 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算( ...

  2. 浅析加密算法五【DES密码】

    文章目录 一.简介 二.原理 2.1 明文加密流程 2.2 密钥生成流程 2.3 初始置换IP 2.4 F轮变换 2.4.1 拓展置换 2.4.2 异或运算 2.4.3 S盒子压缩 2.4.4 P盒子 ...

  3. JAVA中console方法怎么用_Java中Console对象实例代码

    Java中Console对象实例代码 发布于 2020-12-20| 复制链接 摘记: 在JDK 6中新增了java.io.Console类,可以让您取得字节为基础的主控台装置,例如,您可以藉由Sys ...

  4. html中验证密码中是包含字母,在JavaScript中确认密码验证

    在JavaScript中确认密码验证 在本章中,我们将讨论使用JavaScript进行密码验证.每当用户在任何网站或应用上创建帐户时,我们都需要验证密码.因此,我们必须验证有效的密码并进行确认密码验证 ...

  5. LEGO EV3 中执行 VSCode Python 代码过程分析

    镜像为 ev3dev. 通过 SSH 连接 LEGO EV3 设备,默认密码为 maker: $ ssh robot@ev3dev.local Password: Linux ev3dev 4.14. ...

  6. 【测试点分析】1067 试密码 (20分)_20行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实 ...

  7. idea中leetcode提示未登录_IntelliJ IDEA中LeetCode插件配置问题代码解析

    本篇文章小编给大家分享一下IntelliJ IDEA中LeetCode插件配置问题代码解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 首先是在In ...

  8. php支付密码控件,Android高仿微信支付密码输入控件实例代码

    这篇文章主要为大家详细介绍了Android高仿微信支付密码输入控件的具体实现代码,供大家参考,具体内容如下 像微信支付密码控件,在app中是一个多么司空见惯的功能.最近,项目需要这个功能,于是乎就实现 ...

  9. CSS代码缩写,占用更少的带宽/字体缩写/盒模型代码简写/颜色值缩写

    1盒模型代码简写 还记得在讲盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左.具体应用在margin和paddi ...

最新文章

  1. ios webView 放大网页解决/input 获得焦点focus 网页放大 解决
  2. SAPPHIRE NOW阿里云 - 国内传播
  3. android eclipse关联源码,以及源码(代码)以及jar查看软件
  4. mac 上安装Homebrew
  5. 如何修改MFC的图标
  6. C++中的内联函数和C中的宏定义的区别
  7. citirx for wincor configuration (citrix 7.5 setup with WI)
  8. SQL 2005 Reporting Services:物理分页和逻辑分页 SSRS 2008 report export to PDF - Cannot get size to work...
  9. 天猫魔盘在 deepin-linux中的使用
  10. factoryio-2.3.1虚拟仿真实验室软件
  11. 在子页面控制父页面iframe的高度
  12. Microsoft Excel 教程:如何在 Excel 中使用条件格式?
  13. python管理系统学习
  14. 语义分割|学习记录(4)膨胀卷积(空洞卷积 )
  15. 创新之法,法无常法——小鹏汽车访学笔记
  16. 小米10pro搭载鸿蒙,国产手机性能排名:华为全军覆没,小米10Pro垫底,新黑马诞生...
  17. CNN网络架构学习:Chapter-5-ResNet(附代码tensorflow)
  18. Java中如何打印出一个数组中所有元素呢?
  19. 十二星座匹配对象_十二星座爱情配对,看着合适各自谈恋爱的星座
  20. 电动汽车概述:电动汽车软件

热门文章

  1. 7-6 谁是凶手 (100 分)
  2. Android判断GPS是否开启和让用户打开GPS
  3. 【四】Java设计模式GOF23之抽象工厂模式
  4. python给指定目录所有图片添加水印logo,批量生成替换文件,自适应图片大小添加到图片正中间
  5. 一篇文章解决计算机基础——进制转换难题
  6. 21届毫无工作经验毕业生竟然拿到了阿里的意向书?在此分享一下我的阿里3面+HR面面经
  7. Unreal Engin_画廊制作笔记 _005灯光处理,平行光的设置
  8. 计算机考研自主命题表,都有那些学校考研数学是自主命题啊?
  9. ca机构将会被区块链取代
  10. python如何读取mat文件可视化_python 数据分析--数据可视化工具matplotlib