wys的个人博客

你有很多事放不下?做人要潇洒一点~

0%

Command-line Environment

SIGNAL

您的 shell 会使用 UNIX 提供的信号机制执行进程间通信。

我们可以使用man signal 来查看signal的帮助文档。

对于如下的 python 程序

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
import signal, time

def handler(signum, time):
print("\nI got a SIGINT, but I am not stopping")

signal.signal(signal.SIGINT, handler)
i = 0
while True:
time.sleep(.1)
print("\r{}".format(i), end="")
i += 1

运行该程序后按 ctrl+c 会捕捉到信号程序继续运行。

视频中按 ctrl+\ 可以结束程序,但是我这里不知道为什么不行,得按 ctrl+z

Read more »

Data Wrangling

以下代码可以查看服务器的日志

1
ssh myserver journalctl

需要注意的是 myserver 由,<用户名>@<$ip$地址构成>

sed 是一种匹配工具,s 命令的形式如下:s/REGEX/SUBSTITUTION/ 其中 REGEX 是正则表达式,而SUBSTITUTION 是替代文本,也就是将匹配到的正则表达式转换为代替文本,默认只替代一遍。在后面加上g 可以多次匹配。

为了支持更不用加上\ 我们需要在sed后加上-E

以下是该命令的一些示例用法:

Read more »

Shell Tools and Scripting课后练习

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    rust@DESKTOP-L4PLVQ4:~/missing$ ls -lhat --color
    total 0
    -rw-r--r-- 1 rust rust 7 Mar 27 16:18 foo1
    drwxr-xr-x 1 rust rust 4.0K Mar 26 22:01 ..
    drwxr-xr-x 1 rust rust 4.0K Mar 26 18:55 .
    -rwxrwxrwx 1 rust rust 83 Mar 26 18:55 script.py
    drwxr-xr-x 1 rust rust 4.0K Mar 26 18:19 bar
    drwxr-xr-x 1 rust rust 4.0K Mar 26 18:19 foo
    -rw-r--r-- 1 rust rust 0 Mar 26 18:11 foo10
    -rw-r--r-- 1 rust rust 0 Mar 26 18:11 foo2
    drwxr-xr-x 1 rust rust 4.0K Mar 26 17:14 b
  1. 1
    2
    3
    4
    5
    6
    7
    8
    #marco.sh
    #!/bin/bash
    marco() {
    export MARCO=$(pwd)
    }
    polo() {
    cd "$MARCO"
    }
1
2
3
4
5
6
rust@DESKTOP-L4PLVQ4:~/missing/test$ source marco.sh
rust@DESKTOP-L4PLVQ4:~/missing/test$ cd ..
rust@DESKTOP-L4PLVQ4:~/missing$ marco
rust@DESKTOP-L4PLVQ4:~/missing$ cd
rust@DESKTOP-L4PLVQ4:~$ polo
rust@DESKTOP-L4PLVQ4:~/missing$
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    count=1

    while true
    do
    ./buggy.sh 2> out.log
    if [[ $? -ne 0 ]]; then
    echo "failed after $count times"
    cat out.log
    break
    fi
    ((count++))

    done

Shell Tools and Scripting

shell可以定义变量

1
2
3
rust@DESKTOP-L4PLVQ4:~$ foo=bar
rust@DESKTOP-L4PLVQ4:~$ echo $foo
bar

用空格分开会被认为是可执行程序

1
2
rust@DESKTOP-L4PLVQ4:~$ foo = bar
Command 'foo' not found, did you mean:

在打印字符串的时候,单引号和双引号相同

1
2
3
4
rust@DESKTOP-L4PLVQ4:~$ echo "Hello"
Hello
rust@DESKTOP-L4PLVQ4:~$ echo 'World'
World

但是在打印变量的时候,单引号不会替换变量

1
2
3
4
rust@DESKTOP-L4PLVQ4:~$ echo "Value is $foo"
Value is bar
rust@DESKTOP-L4PLVQ4:~$ echo 'Value is $foo'
Value is $foo
Read more »

信息安全概论(8)

病毒的特性

  • 传染性
  • 隐蔽性
  • 危害性

恶意代码的种类

病毒:寄生存在。

木马:独立存在。

蠕虫:强传染性、常利用漏洞自动感染别人。

寄生生存

image-20220325171126332/image-20220325171126332.png)

由于早期的DOS系统,文件很少,如果多出一个文件很容易被发现,所以当时寄生病毒比较流行,但由于代码编写难度较大,逐渐不再流行。

7.1.2 tea基本介绍

1
2
3
4
5
6
7
8
9
void encipher(unsigned int v[2], unsigned int key[4]) {
unsigned int v0 = v[0], v1 = v[1],i,sum = 0,delta = 0x9E3779B9;
for(i=0;i < 32;i++){
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum >> 11) & 3]);
}
v[0] = v0;v[1] = v1;
}

TEA的特点

  • 简单、代码短、无密钥扩展、安全。
  • 理念:轮多转,可以让简单变安全。
  • 实现:CPU基本指令(移位、异或、位与、模加、模减)、占用内存也很小

7.2.1 tea算法设计

TEA的设计:

  1. $feistel$结构,用+-代替⊕(XOR)

  2. 轮函数F比较简单

  3. 轮多:32个循环,64轮。

    其中$\delta = \lfloor(\sqrt{5}-1)2^{31} \rfloor$,只要不为0就行。

TEA的解密函数

1
2
3
4
5
6
7
8
9
10
void decipher(unsigned int v[2], unsigned int key[4]) {
unsigned int i;
unsigned int v0 = v[0], v1 = v[1],,delta = 0x9E3779B9,sum = delta*num_rounds;
for(i=0;i < num_rounds;i++){
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum >> 11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
}
v[0] = v0;v[1] = v1;
}

信息安全概论(6)

Feistel 加密算法

Feistel的优点在于:由于它是对称的密码结构。所以对信息的加密和解密的过程就极为相似,甚至完全一样。这就使得在实施的过程中,加解密的设备一样,这就减少了几乎一半的成本。

Feistel 加密操作:

1
2
3
4
5
6
for(int i=1;i<=n;i++){
L[i] = R[i-1];
R[i] = L[i-1]^F(R[i-1],K[i]);
}
L[n+1] = R[n];
R[n+1] = L[n];

F函数:

  1. 不可求逆

  2. 非线性

  3. 混乱性
  4. 扩散性
  5. 雪崩性
  6. 比特独立

信息安全概论(5)

5.1.1 电子时代加密

加密本质上由两部分组成,分别为置换替代

置换($permutation$):如左边第一个位置的值到右边换到第三位。左右两边1或0的个数必定相等。P-box的输入线数可以做的很大。

image-20220322165135496/image-20220322165135496.png)

替代($substituion$):解码器+ p-box + 编码器 构成s-box。左右两边1或0的个数不一定相等。他的输入线数不适合做很大。

image-20220322170743324/image-20220322170743324.png)

组合:并联 + 串联,同时引入密钥,就构成了DES加密算法的雏形。

image-20220322172125431/image-20220322172125431.png)

由于S盒输入线数不适合做的很大,所以可以采用多个S盒并联和然后和P盒串联来构成一轮加密操作。每一轮加密操作之前明文都要和密钥进行异或操作。

5.2.1 DES的简介

DES利用56比特串长度的密码来加密长度为64位的明文,经过16轮运算,得到长度为64位的密文。密钥通过16轮密钥扩展算法生成16个子密钥。

image-20220322180312723/image-20220322180312723.png)

5.3.1 简化DES的轮密钥生成

  1. 先对密钥按一定顺序进行排列。
  2. 然后将密钥进行分组。
  3. 对每组中的密钥循环左移。
  4. 重新组合成56-bit
  5. 然后再按另一种方式进行全排列。

5.4.1 简化DES轮过程

  1. 将明文分为左右两部分。
  2. 将右明文进行扩展。
  3. 将结果与子密钥进行异或。
  4. 将扩展比特的字符串转化为原位数。
  5. 将得到的结果与左明文异或作为右明文,原右明文作为左明文。

5.5.1 计算机时代

扩散(Diffusion):明文的统计结构被扩散消失到密文的长程统计特性,使得明文和密文之间的统计关系尽量复杂。

混乱(confusion):使得密文的统计特性与密钥的取值之间的关系尽量复杂。

好加密算法的现象——雪崩效应

明文或密文变化1bit密文所有bit都可能发生变化。

The best is : 每bit变化的概率为$\frac{1}{2}$ ,且bit之间变化相互独立。

webserver消息流动图

  • Server
    • 监听进来的TCP字节流
  • Router
    • 接受HTTP请求,并决定调用哪个Handler
  • Handler
    • 处理HTTP请求,构建HTTP响应
  • HTTP Library
    • 解释字节流,把它转化为HTTP请求
    • 把HTTP响应转化回字节流

信息安全概论(3)

磁盘加密

Truecrypt 这个貌似是上古遗物了,现在貌似都用BitLocker

Truecrypt 这个东西貌似支持双密码,一个真密码一个假密码。

用到加密的数据的时候就把他挂载到硬盘上,不用的时候就取消挂载,这样数据就读不出来了。

软件开源。

邮件加密

pgp4win

这个软件可以支持双钥密码加密密钥公开的应用,也可以支持双钥密码解密密钥公开的应用。

软件开源。

thunderbird

邮件客户端,也支持加密解密。也是上古遗物了。

软件