实验一 密码引擎-4-国䀄算法交叉测试(选做) 0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名 1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图 2 在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法) 在安装了正确版本的openssl之后,下面就是利用openssl自带的命令生成SM2公私钥对了:
1.创建EC参数和原始私钥文件: openssl ecparam -out ec_param.pem -name SM2 -param_enc explicit -genkey 注:生成完成后可以查看一下EC私钥信息:
openssl ecparam -in ec_param.pem -text
然后验证一下参数: openssl ecparam -in ec_param.pem -check 2.将原始的私钥文件,转换为pkcs8格式: openssl pkcs8 -topk8 -inform PEM -in ec_param.pem -outform pem -nocrypt -out pri_key_pkcs8.pem 3.利用原始的私钥,生成对应的公钥: openssl ec -in ec_param.pem -pubout -out pub_key.pem 至此SM2的秘钥对已经生成结束,pri_key_pkcs8.pem是SM2私钥,而pub_key.pem是公钥。 3 在kali中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图 把摘要值放进dgst.txt中: 用sm2的私钥进行签名:
查看隐藏文件夹命令:ls -a 创建文件:touch 文件名 删除文件夹命令:rm -r 文件夹名 删除文件命令:rm 文件名 2、进入vim模式退出: 编辑模式分为vi和vim两种,区别就是一个纯色一个有颜色。vi模式是纯黑白色,vim模式彩色。
2.1 不小心进入了vim编辑模式,但是不知道怎么退出去 先按“ESC”进入命令模式,接着输入冒号“:”,再输入退出编辑器的几个命令字符 退出编辑器分为4种情况:保存退出、正常退出、不保存退出和强制退出 保存退出 输入“w”:保存 输入“wq”:保存退出 正常退出 输入“q”:退出 不保存退出 输入“q!” 强制退出 输入“!” 最后按回车“Enter”就可按照你想要退出的方式退出啦!
3、conda管理虚拟环境 命令 工能 conda info -e 查看有多少环境 conda -version 查看conda版本 conda updata conda 升级conda conda create --name py36 python=3.6 创建新环境py36,位置在安装文件的envs/py36 下 source activate py36 激活新环境py36 conda remove -n py36 --all 删除名字py36的环境 source deactivate 退出环境
ANACONDA实现创建虚拟环境
1、为什么选择ANACONDA Anaconda可以帮助我们创建多个开发环境,也可以帮助我们安装第三方包。比如在安装tensorflow的时候,它会帮我们安装很多其余所配套的包,以至于不会发生版本兼容问题
2、安装ANACONDA指令 2.1下载安装包 这里我们使用清华镜像文件下载会更快
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.07-Linux-x86_64.sh 2.2找到Anaconda3-2019.07-Linux-x86_64.sh安装包,用 sh1命令执行 .sh 文件,开始安装 2.3按回车观看更多许可信息,按 Q 键跳过 2.4是否接受许可条款, 输入yes回车 2.5继续点击enter 2.6输入 yes,添加环境变量 注意: 这里需要注意点的就是如果你直接跳过这部设置环境变量的话:
[no ] 那你需要自己到这个文件夹设置你安装Anaconda路径(比如上面显示我的是)
/home/wangke/.bashrc 单击进去,在最后一行添加:
export PATH=/home/anaconda3/bin:$PATH 需要把之前的那句话给注释掉如下所示:
# export PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/sbin:/sbin:$PATH export PATH=/root/anaconda3/bin:$PATH 这里只是个示例,具体的还是要看你们自己安装的路径。 然后保存更改,输入下面这句指令:
source ~/.bashrc 2.7 检测安装是否成功 打开新的终端后,进入自己的文件夹目录下,输入anaconda -V(注意a要小写,V要大写),conda -V ,显示版本信息,若显示则表示安装成功。
注意:每次连接服务器都是默认base环境,退出base环境后可以通过以下命令来设置终端默认环境为“非base”
conda config --set auto_activate_base false 3、ANACONDA实现创建虚拟环境
Linux命令行与shell脚本编程大全下载链接:
Linux命令行与shell脚本编程大全下载链接
1、自建yum仓库,分别为网络源和本地源 #1 关闭防火墙 vim /etc/selinux/config SELINUX=disabled #2 查看防火墙为关闭状态 firewall-cmd --permanent --list-port FirewallD is not running #3 安装httpd yum -y install httpd #4 开启apache服务并设置开机启动 systemctl enable --now httpd #5 http访问测试,能够正常打开网站。 #6 创建文件夹用于存放本地源 mkdir -p /var/www/html/centos/7/os/x86_64 #7 挂载光盘或拷贝光盘文件到x86_64文件夹 mount /dev/cdrom /var/www/html/centos/7/os/x86_64 #8 打开网页地址可正常显示光盘内的文件 #9 先把原来系统相关的配置文件归置备份 mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/ #10 修改配置文件 vim /etc/yum.repos.d/base.repo [BaseOS] name=BaseOS baseurl=http://192.168.61.128/centos/$releasever/os/x86_64/ https://mirrors.cloud.tencent.com/centos/$releasever/os/$basearch/ https://mirrors.aliyun.com/centos/$releasever/os/$basearch/ https://repo.huaweicloud.com/centos/$releasever/os/$basearch/ gpgcheck=0 enabled=1 [epel] name=Epel baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/ https://mirrors.cloud.tencent.com/epel/$releasever/$basearch/ https://mirrors.huaweicloud.com/epel/$releasever/$basearch/ gpgcheck=0 enabled=1 #11 查看源是否正常 yum repolist repo id repo name status BaseOS/7/x86_64 BaseOS 4,070 epel/7/x86_64 Epel 13,748 repolist: 17,818 2、编译安装http2.
1. 数据库管理系统(DateBase Management System )DBMS 是专门为管理数据库而设计的一个电脑软件系统 分为两种: (1)关系数据库:建立在关系模型基础上的数据库,比如 SqlServer , MySQL, Oaracle, Access
所以 SqlServer是数据库的一个管理软件,利用此工具建立一个数据库。
(2)非关系数据库:与关系数据库不同点就是,不使用SQL作为查询语言
数据库(DateBase)DB:
按照一定的数据结构来组织,存储和管理数据的仓库。是存储在一起的相关的数据的一个集合。
数据库系统:由数据库和数据库管理系统组成。
2. 打开数据库: (1)启动服务:可以使用 SQL SERVER配置管理器
(2)打开 SQL SERVER Management Studio ,使用工具连接到数据库
可以使用Windows身份验证 :
要求必须先登录Windows,数据库装到了某个Windows上(本机连接)
在 服务器名称 :浏览更多--》数据库引擎---》选择创建过的数据库实例
或者
SQL SERVER 身份验证
在建立数据库实例时,要选择混合模式,设定 SQL SERVER系统管理员sa账户指定密码
当数据库 和 服务器 分离时(远程连接),使用此方式; 必须登录:登录名和密码,还有 服务器名称 :就是SQL SERVER系统的IP地址
(3)如何自己创建一个登录名: 首先,以Windows身份验证登录,在安全性结点---》登录名---》右击登录名---》选择新建登录名----》设置登录名,可以选择设置为 SQL Server身份验证,输入密码
最重要的是:在左边选择”服务器角色“----》选择 public 和 sysadmin
相当于给予了它管理的权限
centos7.5内核编译安装 1.安装依赖
yum -y install gcc bc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel
2.下载内核版本解压并进入解压目录(4.12.3版本)
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.3.tar.xz && tar -xvf linux-4.12.3.tar.xz && cd linux-4.12.3
3.清理内核源目录
make mrproper
4.使用make menuconfig菜单来订制内核功能 (这里我们使用默认直接保存即可)
make menuconfig
5.编译(时间很长,可以吃几局鸡再来)
make
6.安装模块(进入解压目录安装模块,安装完毕后可以到/lib/modules目录下查看)
make modules_install
查看/lib/modules
7.执行make install 安装内核相关文件
make install
8.安装完成后修改默认内核启动项
cat /boot/grub2/grub.cfg | grep menuentry //查看系统可用内核 grub2-set-default 'CentOS Linux (4.12.3) 7 (Core)' //修改开机默认使用的内核
9.重启电脑后uname -r查看内核版本
reboot
uname -r
这样就完成了
网络编程 一 客户端/服务端架构
二 osi七层协议
三 socket层
四 socket是什么
五 套接字发展史及分类
六 套接字工作流程
七 基于TCP的套接字
八 基于UDP的套接字
九 粘包现象
十 什么是粘包
十一 解决粘包的low处理方法
十二 高手解决粘包的方法
十三 认证客户端的链接合法性
十四 socketserver实现并发
一 客户端/服务端架构 1.硬件C/S架构(打印机)
2.软件C/S架构
互联网中处处是C/S架构
如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)
腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)
C/S架构与socket的关系:
我们学习socket就是为了完成C/S架构的开发
二 osi七层协议 引子:
须知一个完整的计算机系统是由硬件、操作系统、应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己玩了(打个单机游戏,玩个扫雷啥的)
如果你要跟别人一起玩,那你就需要上网了,什么是互联网?
互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语
如果把计算机比作人,互联网协议就是计算机界的英语。所有的计算机都学会了互联网协议,那所有的计算机都就可以按照统一的标准去收发信息从而完成通信了。
人们按照分工不同把互联网协议从逻辑上划分了层级,
详见网络通信原理:https://www.cnblogs.com/chenxiao1/p/14893950.html
为何学习socket一定要先学习互联网协议:
1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件
2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通信的
3.然后:网络的核心即一堆协议,协议即标准,你想开发一款基于网络通信的软件,就必须遵循这些标准。
4.最后:就让我们从这些标准开始研究,开启我们的socket编程之旅
图1
三 socket层 在图1中,我们没有看到Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。
图2
四 socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的
也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序 而程序的pid是同一台机器上不同进程或者线程的标识 五 套接字发展史及分类 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。
DDMS不显示进程信息,参考了网络上很多方法。 我们需要将android系统的 ro.debuggable的值设为1.
将mprop工具放置到/data中(其他目录应该也可以) adb shell远程连接手机 su 获得root权限 cd /data(mprop工具所在目录) ./mprop ro.debuggable 1 getprop ro.debuggable查看ro.debuggable的值是否已被修改为1 stop/start 重启ddms 我们发现已经可以显示进程信息了 mprop下载地址https://github.com/wpvsyou/mprop
上述方法有个缺点,每次数据线重连手机都需要重新 stop/start才能让DDMS显示进程的信息,有博主写过永久有效的方法,自行进行测试:https://blog.csdn.net/weixin_41722852/article/details/109517830
redis cluster是redis3.0提供的分布式解决方案,有效的解决了redis分布式方面的需求,同时它也是学习分布式存储的绝佳案例。 学习redis cluster是大家学习分布式数据库的一个很好的案例
我们为什么需要redis cluster集群这样的功能? 并发量:redis单机默认支持10万/s ,如果对并发要求更高,百万/s呢? 数据量:redis单机内存是16-256G,如果业务需要500G呢?
解决方法: 配置强悍的机器:超大内存,超牛CPU 正确的解决方法: 分布式:简单的认为加机器 集群,规模化需求 并发量需求,QPS 数据量需求,大数据 数据分布概论 分布式数据库,数据分区 顺序分区和哈希分区 数据顺序分布和哈希分布的对比 注意:哈希分布不支持批量操作 哈希分布主要有三种 (1)节点取余分区 (2)一致性哈希分区(是对节点取余分区问题的一种优化) (3)虚拟槽分区(redis cluster使用的分区方式) 节点取余分区 节点取余会有一个问题 当添加一个节点的时候,会有80%左右的数据进行分区迁移 翻倍扩容分区,这样会好一点,将有50%左右的数据进行分区迁移 节点取余的特点 客户端分片:哈希+取余 节点伸缩:数据节点关系变化,导致数据迁移 迁移数量和添加节点数量有关,建议翻倍扩容分区 一致性哈希分区 一致性哈希解决了节点取余带来数据迁移过大的问题,在Memcache中使用比较广泛 一致性哈希 客户端分片:哈希+顺时针(优化节点取余) 节点伸缩:只影响临近节点,但是还是有数据迁移 翻倍伸缩:保证最小迁移数据和负载均衡 虚拟槽分区 redis cluster采用了虚拟槽分区的方式 预设虚拟槽,每个槽映射一个数据子集,一般比节点数大 良好的哈希函数,例如CRC16 服务端管理节点、槽、数据,例如redsi cluster redis cluster的基本架构 智能客户端知道每一个节点负责的槽的范围