Howie's Notes

Machine Learning and Cyber Security

Docker 是一种基于 Linux 的容器化技术,类似于轻量的虚拟机。它采用 C/S 架构,使用 Go 语言开发。

版本

Docker 分为 2 个版本:社区版(Community Edition, CE)和企业版(Enterprise Edition, EE),顾名思义,企业版是收费的。

针对 macOS 10.10.3 和 Windows 10,Docker 还推出了 Docker Desktop,Docker Desktop 又分为 2 个渠道(channel),稳定渠道(Stable)和抢先渠道(Edge),需要注意的是,Docker Desktop 对系统是有要求的,例如,针对 Win10 的 Docker for Windows 因为要用到 Hyper-V 虚拟机,所以要求系统是 64 位专业版或企业版并开启 Hyper-V 功能。

针对老版本的 Windows 或 macOS,可以使用 Docker Toolbox,它会附带安装一个 VirtualBox 虚拟机。

使用 docker version 可以查看 docker 版本号,使用 docker info 可以查看 docker 详细信息,直接输入 docker 可以查看 docker 相关命令。

Read more »

Git是目前最流行分布式版本控制系统(Distributed Version Control System, DVCS),类似的工具还有Mercurial(由hg命令操作)等;在早期,人们常使用集中式版本控制系统(Centralized Version Control System,CVCS),其典型有CVSSubversion(SVN)等;现在,越来越多的人开始使用更为优秀的分布式版本控制系统,所谓版本控制,即可以随时记录并切换文件的不同版本。

安装

配置

Git共有3个配置文件,分别是:

  • /etc/gitconfig文件用于配置所有用户的配置信息,使用git config --system命令配置
  • 某个用户家目录下的.gitconfig文件只适用于该用户,使用git config --global命令配置
  • 当前Git仓库的.git/config仅针对当前项目,直接使用git config命令进行配置

注意:每一个级别会覆盖上一级别的配置,所以.git/config的配置变量会覆盖/etc/gitconfig中的配置变量。
按照个人偏好,针对新安装的Git环境,会配置如下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 配置提交时使用的用户名和邮箱,必须配置
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

# 开启颜色显示
git config --global color.ui true

# 配置别名
git config --global alias.lg1 "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"
git config --global alias.lg2 "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"
git config --global alias.lg '!"git lg1"'
git config --global alias.adog "log --all --decorate --oneline --graph"

# 配置difftool为Meld(Windows)
git config --global diff.tool meld
git config --global difftool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global difftool.prompt false

# 配置mergetool为Meld(Windows)
git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global mergetool.prompt false

另外,Git默认使用的编辑器是Vim,若要配置成自己喜欢的编辑器(如Emacs),可使用命令:git config --global core.editor emacs
最后,你可以使用git config --list来查看所有配置信息。

Read more »

SSH(Secure Shell)即安全外壳协议,是一种位于应用层的加密的网络传输协议,虽然任何网络服务都可以通过 SSH 实现安全传输,但其最常见的用途还是远程登录,是 Telnet 等非安全 Shell 的替代品。

OpenSSH 的运行机制

SSH 是一种协议,其实现多种多样,目前使用最广泛的实现是 OpenSSH 项目。当使用 ssh user@host 命令进行登录时,所完成的整个过程如下:

  1. 远程主机收到用户的登录请求,把自己的公钥发给用户
  2. 用户使用这个公钥,将登录密码加密后,发送给远程主机
  3. 远程主机用自己的私钥,解密登录密码,若密码正确,则同意用户登录
  4. 后续过程中,用户发送的信息都采用此方式进行加密发送
Read more »

随着时间的发展,WSL 变化了很多,本文所描述的主体为 WSL 1,有关 WSL 2 的相关内容请参考 升级到 WSL 2

名称问题

最早这个项目命名为 Bash on Ubuntu on Windows,随后改名为 Windows Subsystem for Linux(适用于 Linux 的 Windows 子系统),即 WSL,值得肯定的是,随着 Windows 10 逐渐更新,慢慢统一了命名。

Read more »

全屏问题

由于 Hyper-V 最初是为服务器设计的,所以到目前为止,Hyper-V 对于全屏的支持没有 VMware 做得好,同样,Hyper-V 也不能像 VMware 那样随意更改窗口大小,这多少显得很不方便。

对于 Windows 虚拟机的全屏操作,目前较为理想的解决方案是使用远程桌面连接,记得要在虚拟机中开启远程桌面连接功能;而对于 Linux 虚拟机的全屏操作,可以通过修改 /etc/default/grub 文件,更改其中 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1920x1080"(注意是 x 不是 *),接着执行 update-grub 并重启即可。

Read more »

Base64

Base64,顾名思义是一种基于 64 个可打印字符来表示二进制数据的表示方法,这 64 个字符分别为 A-Za-z0-9 以及 +/。64 个字符可用 6 个比特位表示,3 个字节有 24 个比特位,对应于 4 个 Base64 单元,所以编码后的数据要比原始数据略长,为原来的 4/3。Base64 索引表如下所示:

数值 字符 数值 字符 数值 字符 数值 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
Read more »

密码学(Cryptography)大致可分为古典密码学(Classic cryptography)和现代密码学(Modern cryptography),两者的主要差别在于计算机的使用,一般来说,古典密码学是基于字符的,而现代密码学是基于二进制位的。古典密码学主要包括两类,即代换置换

代换

代换密码是将明文中的字符替代成其他字符,即替代转换,若整个加密过程中每个字符采用同一张表替代,则为单表代换密码,类似的,若整个加密过程中每个字符采用不同的表替代,则为多表代换密码,典型的单表代换密码有凯撒密码、培根密码等,多表代换密码有维吉尼亚密码等。

凯撒密码

凯撒密码(Caesar cipher)就是将明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量为 3 时,所有的字母 A 将被替换成 D,B 变成 E,以此类推。

明文 Hello World 的加密过程如下:

  1. 取偏移量为 3
  2. 计算 H 的后 3 位为 K
  3. 以此类推
  4. 密文为:Khoor Zruog

类似的,解密过程如下:

  1. 计算 K 的前 3 位为 H
  2. 以此类推
  3. 明文为:Hello World

注意:当偏移量为 13 时,这种凯撒密码的特例又被称为 ROT13(回转 13 位)加密,ROT13 加密是一种对等加密(Reciprocal cipher),对等加密是对称加密的一个特例,即该类密码的加密算法是它自己本身的逆反函数,换言之,要对其解密,只需对其密文再次套用加密算法即可。当偏移量未知时,可采用穷举法一个个试,偏移量必定小于 26。

Read more »

JSFuck是一种JavaScript的编码方式,它的命名起源于Brainfuck,同样,为了避讳脏话,它又被写作JSF*ck,以JSFuck风格写出的代码不需要另外的编译器或解释器执行,原生的JavaScript解释器即可直接运行。
JSFuck种共使用[]()!+6种字符。alert(1)这段JavaScript代码用JSFuck风格表示如下所示:

1
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()

要将任意的JavaScript代码编码为JSFuck风格,可前往JSFuck

0%