killBase系列 -- 密码学(二)_weixin_34032827的博客-程序员秘密

技术标签: java  操作系统  密码学  

前言

因为排版不理想,所以直接用两个文档承载,有什么不便,还请担待。
killBase -- 密码学(一) 传送门

附录

1. DES 详细加密过程

1. **对输入的密钥进行变换**。
    用户的64bit密钥,其中第8, 16, 24, 32, 40, 48, 56, 64位是校验位, 使得每个密钥都有奇数个1。所以密钥事实上是56位。对这56位密钥进行如下表的换位。

57, 49, 41, 33, 25, 17,   9,  1, 58, 50, 42, 34, 26, 18, 10,  2, 59, 51, 43, 35, 27, 19, 11,  3, 60, 52, 44, 36, 
63, 55, 47, 39, 31, 23, 15,  7, 62, 54, 46, 38, 30, 22, 14,  6, 61, 53, 45, 37, 29, 21, 13,  5, 28, 20, 12,   4,

表的意思是第57位移到第1位,第49位移到第2位,...... 以此类推。变换后得到56bit数据,将它分成两部分,C[0][28], D[0][28]。

2. **计算16个子密钥**,计算方法C[i][28] D[i][28]为对前一个C[i-1][28], D[i-1][28]做循环左移操作。16次的左移位数如下表:

 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16   (第i次)
 1,  1,  2,  2,  2,  2,  2,  2,  1,  2,  2,  2,  2,  2,  2,  1    (左移位数)

3. **串联**计算出来的C[i][28] D[i][28] 得到56位,然后对它进行如下变换得到48位子密钥K[i][48]

14, 17, 11, 24,  1,  5,  3, 28, 15,  6, 21, 10, 23, 19, 12,  4, 26,  8, 16,  7, 27, 20, 13,  2,
41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32,

表的意思是第14位移到第1位,第17位移到第2位,以此类推。在此过程中,发现第9,18,22,25, 35,38,43,54位丢弃。

4. 对64bit的明文输入进行换位变换。换位表如下:

58, 50, 12, 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,
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

表的意思就是第一次变换时,第58位移到第1位,第50位移到第2位,...... 依此类推。得到64位数据,将这数据前后分成两块L[0][32], R[0][32]。

5. 加密过程,对R[i][32]进行扩展变换成48位数,方法如下, 记为E(R[i][32])

32,  1,  2,  3,  4,  5,   
 4,  5,  6,  7,  8,  9,
 8,  9, 10, 11, 12, 13, 
12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21,
20, 21, 22, 23, 24, 25, 
24, 25, 26, 27, 28, 29,
28, 29, 30, 31, 32,  1,

6. 将E(R[i][32])与K[i][48]作异或运算,得到48位数,将48位数顺序分成8份,6位一份,B[8][6]。

7. 使用S[i]替换B[i][6]。过程如下: 取出B[i][6]的第1位和第6位连成一个2位数m, m就是S[i]中对应的行数(0-3),取出B[i][6]的第2到第5位连成一个4位数n(0-15),n就是S[i]中对应的列数,用S[i][m][n]代替B[i][6]。S是4行16列的对应表,里面是4位的数,一共有8个S,定义如下:

S[1]:
   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,
S[2]:
    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,
S[3]:
    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,
S[4]:
    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, 
S[5]: 
  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, 
S[6]: 
  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, 
S[7]: 
  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, 
S[8]: 
  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,

8. 将从B[i][6]经过S得到的8个4位数连起来得到32位数。对这个数进行如下变换:

   16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, 
  2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,

  得到的结果与L[i][32]作异或运算,把结果赋给R[i][32]。

9. 把R[i-1][32]的值赋给L[i],从5开始循环。直到K[16][48]结束。

10. 将最后的L,R合并成64位,然后进行如下转化得到最后的结果。这是对第4步的一个逆变化。
 40, 8, 48, 16, 56, 24, 64, 32, 
 39, 7, 47, 15, 55, 23, 63, 31, 
 38, 6, 46, 14, 54, 22, 62, 30, 
 37, 5, 45, 13, 53, 21, 61, 29, 
 36, 4, 44, 12, 52, 20, 60, 28,
 35, 3, 43, 11, 51, 19, 59, 27, 
 34, 2, 42, 10, 50, 18, 58, 26, 
 33, 1, 41,   9, 49, 17, 57, 25

2. https 的加密算法

由于之前看过 https 是 由 secure socket layer 实现的。 也是通过 公钥私钥 保证其安全性,所以在学习这篇文章的时候,就想 https 是由哪种 加密算法 做为其 底层实现的呢。 因此,就有了下面这部分。

关于 https 与 http 的区别 请看我的这篇博客,不再赘述。网络基础知识

原理:

  • 浏览器把自身支持的一系列Cipher Suite(密钥算法套件,后文简称Cipher)[C1,C2,C3, …]发给服务器;

  • 服务器接收到浏览器的所有Cipher后,与自己支持的套件作对比,如果找到双方都支持的Cipher,则告知浏览器;

  • 浏览器与服务器使用匹配的Cipher进行后续通信。如果服务器没有找到匹配的算法,浏览器(以 Chrome 56为例)将给出错误信息:

下面讲一下如何分析。

  1. 准备: 通过可以抓取网络包的工具,这里通过 Wireshark 分析。关于wireshark 的介绍请点击这里.查看浏览器发送给服务器的 Ciper服务器的 Ciper

  2. 流程:

    • 浏览器首先发起握手协议, 一个'Client Hello'消息,如下图,按照Protocol协议顺序排序,然后,找到Client Hello,选中,依次查找 'Secure Sockets Layer' -> TLSv1.2 Record Layer -> Handshake protocal ->Ciper Suites.

    • 可以看到, Cipher有很多。总共16,第一个是Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)。

    • 如果按照顺序继续寻找第一个 Info 为'Sever Hello' 的报文,可以找到相应的Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) 。.

  3. Cipher介绍:

    • 密钥交换算法,用于决定客户端与服务器之间在握手的过程中如何认证,用到的算法包括RSA,Diffie-Hellman,ECDH,PSK等

    • 加密算法,用于加密消息流,该名称后通常会带有两个数字,分别表示密钥的长度和初始向量的长度,比如DES 56/56, RC2 56/128, RC4 128/128, AES 128/128, AES 256/256

    • 报文认证信息码(MAC)算法,用于创建报文摘要,确保消息的完整性(没有被篡改),算法包括MD5,SHA等。

    • PRF(伪随机数函数),用于生成“master secret”。

    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b):

      • 基于TLS协议

      • 使用 ECDHE,ECDSA作为密钥交换算法

      • 加密算法 AES(密钥与初始向量的长度为128)

      • MAC 算法 SHA

  4. 总结:

Client端密钥算法套件[C1,C2,C3],Server端密钥算法套件[C4,C2,C1,C3],
则,IIS[(Internet Infomation Services)](),C2将被优先返回


3. wireshark 的使用问题

问题:第一次使用 wireshark 的时候,不显示接口。原因是。。。
刚开始使用 在windows 上需要 winpacp 并且开启 npf 服务。
注: 如果 没有安装 winpacp ,想直接 通过 net start npf 开启服务,将会提示。 发生系统错误2

  1. winpacp 安装 。。。

这里是下载网站
直接安装即可。

  1. 开启 npf 服务

打开 cmd ,输入 net start npf ,提示:服务已经启动。

  1. 进入界面,选择相应的网卡。


这里,可以通过 网络连接 看出来。

所以,我的是无线网络连接。

  1. 最终界面


WireShark 主要分为这几个界面

  1. Display Filter(显示过滤器), 用于过滤

  2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表

  3. Packet Details Pane(封包详细信息), 显示封包中的字段

  4. Dissector Pane(16进制数据)

  5. Miscellanous(地址栏,杂项)

结语

发现排版,好像是有问题的,阅读效果不理想,可以去我的个人博客中。

都看到这里了,点个关注,点波再走,QAQ。
你的小手轻点,是我最大的动力哦。

一只想当程序员的1米88处女座大可爱如此说

参考

  1. DES 加密算法解析

  2. 分组加密的四种模式

  3. 阮一峰--RSA算法原理

  4. java中RSA加解密的实现

  5. 关于RSA算法密钥长度/密文长度/明文长度

  6. https背后的加密算法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34032827/article/details/88946018

智能推荐

SpringBoot学习笔记——(一)自动配置原理_巧笑情兮_美目盼兮的博客-程序员秘密

一、Spring Boot入门1.Spring Boot 简介https://blog.csdn.net/u011870547/article/details/80975623简化Spring应用开发的一个框架整个Spring技术栈的一个大整合J2EE开发的一站式解决方案2.微服务微服务:架构风格(服务微化)一个应用应该是一组小型服务;可以通过HTTP的方式进行互通单体应用...

京东零售数据仓库演进之路_数据社的博客-程序员秘密

摘要:京东零售十年交易额快速增长的背后,不仅是京东零售高速发展的十年,也是数据仓库技术架构演进创新的十年,EB级数据如何进行资产化沉淀和治理?如何支撑业务高速发展、精细化运营、规模化创新的不同阶段?在未来更加复杂多变的环境下,将如何持续演进?作者:尹翔编辑:老鱼尹翔,京东零售数据仓库技术负责人,负责数仓体系的建设,2013年加入京东,一路伴随京东大数据的发展,在这个过程中...

NSDate获取指定格式的当地时间_nsdate date 北京时间_iChenwin的博客-程序员秘密

方法[NSDate date]默认获得的是0时区的时间,想要得到当前的北京时间需要手动指定时区:NSDate *currentDate=[NSDate date];NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; /

一场聚会,从实施转行软件测试月薪13.5k,感谢那位女同学...._测试界的彭于晏的博客-程序员秘密

我是晓晨,学的是工科,毕业后从事了项目实施的工作,因为经常要出差而且还经常在项目上,起初同学聚会还叫,后来也就慢慢的少了联系,朋友圈里每每看到同学们三三两两的聚会,而我好像是个局外人,心里不是滋味。今天是我工作600天的日子,也正好项目阶段性的验收结束,我迫不及待的给各位同学打电话,约了个场子,特想畅快的大醉,倾述下我的孤独,却没想到.....●繁华的大都市,离我越来越远...... .....更不敢想心中的那个她在哪里......身边女同学取纸巾的一个动作让我崩溃了。不小心菜掉到.

人工智能实验:王浩算法python实现(附算法设计图)_抱程序媛回家的博客-程序员秘密

人工智能王浩算法python实现(附算法设计图)实验课作业,没什么实际价值,不过还挺难的,copy一下应付作业没问题。原作者: 王浩算法—DMU.他的版本写的比较晦涩,我改了很多,效率提高不少,当然也容易理解了,顺便把算法设计图写出来了。一、算法设计图:二、完整代码注:实验环境python3.8,pycharm直接跑就行,在main函数那里可以改问题输入import copy# 列表转字符串def listtostr(m): s = '' for i in m:

随便推点

win10开机未能正确启动_简单一招让win10系统8秒开机,还能自启动10个程序_weixin_39574246的博客-程序员秘密

正常情况下,想要电脑几秒开机,就需要将不必要的自启动项禁用。但如果说,老毛桃有方法能够让电脑迅速开机,顺便还能自启动多个程序,大家相信吗?小知识:开机启动项是计算机系统当中非常重要的一个概念,它关系到计算机的启动速度即开机速度。启动项实际上就是指那些会随着计算机组件一同启动的程序和软件,它们大部分是系统的组件程序,但是也有很多是第三方的软件或程序。如果不注意对其进行管理的话,开机启动项会对我们计算...

无监督学习特征--稀疏编码、深度学习、ICA部分代表文献-------之一_zhoutongchi的博客-程序员秘密

l         学习映射函数及在行为识别/图像分类中应用的文献(模型与非模型之间存在关联,算法相互采用,没有明确的区分,含仿生学文献)% 研究重点放到ICA模型及深度学习兼顾稀疏编码1)稀疏编码(稀疏编码、自动编码、递归编码):[1] B. Olshausen and D. Field. Emergence of simple-cell receptive field propert

芒果数据库MongoDB入门开胃菜,简单易学_芒果数据库启动_BenzGL550的博客-程序员秘密

MongoDB 是NoSQL 的一种,面向文档的数据库, 介于传统的结构化数据库(关系型数据库)与非结构化数据库(文件存储)之间的一种,它的数据结构非常松散,也非常灵活,在现代化的计算机应用中,常用来存储分布式文件,以便于大数据处理. 最近项目进入尾声,也没什么BUG 了, 有点时间看看在最近几年很火的芒果数据库--MongoDB. 在github 上找到了这个入门文档,转载在博客上,方便自己

HJZ-J920/AC220V中间继电器_上海约瑟电器有限公司 综合运营的博客-程序员秘密

HJZ-J920/AC220V中间继电器型号:HJZ-Y908中间继电器名称:中间继电器额定电压:48220VDC;48415VAC触点容量:250V,5A系列型号:HJZ-J902静态中间继电器;HJZ-J905静态中间继电器;HJZ-J907静态中间继电器;HJZ-J907L静态中间继电器;HJZ-J908静态中间继电器;HJZ-J909静态中间继电器;HJZ-J910静态中间继电器;HJZ-J911静态中间继电器;一 用途HJZ-J920/AC220V中间继电器用于直流或交...

value_aeolus_pu的博客-程序员秘密

go具有各种各样的数值类型如strings,integers,floats,booleans等等,下面有一些基本的examplesstrings 可以通过+号连接合并一个新string。integers 和floats 都跟其他语言一样,基于基本的运算。booleans 还有你希望的booleans用法如下:package mainimport "fmt"

Shell脚本加入开机自启动的方法:_shell 自启动_520nobody的博客-程序员秘密

Shell脚本加入开机自启动的方法:Linux中脚本设定开机自启动方法一:1,在某个目录下创建脚本:例如:/root/hello/wei.sh (注意:脚本中必须加入: #!/bin/bash#chkconfig:2345 10 90#description:resind 2,cp /root/hello/wei.sh /etc/init.d/wei.sh(注意:也可以直接在 /etc/init.d下,直接创建wei.sh脚本)3. 给脚本执行权限:chmod +x /etc/in

推荐文章

热门文章

相关标签