Howie's Notes

Machine Learning and Cyber Security

密码学(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。

Brainfuck 是在 1993 年创建的一种极小化的计算机语言,由于 fuck 在英语中是脏话,这种语言有时也被称为 Brainf*ck 或 Brainf***,或被简称为 BF。

Brainfuck 中共有 8 种字符,它们及其含义如下所示:

  • >:指针加一
  • <:指针减一
  • +:指针指向的字节的值加一
  • -:指针指向的字节的值减一
  • .:输出指针指向的单元内容(ASCII 码)
  • ,:输入内容到指针指向的单元(ASCII 码)
  • [:如果指针指向的单元值为零,向后跳转到对应的 ] 指令的次一指令处
  • ]:如果指针指向的单元值不为零,向前跳转到对应的 [ 指令的次一指令处

下面是一个用 Brainfuck 在屏幕上打印 Hello World 的程序例子:

1
2
3
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.

程序的运行结果如 BrainFuck 所示。

我没有写错,本文所记述的不是 Knuth 的那本举世瞩目的 TAOCP(计算机程序设计艺术),而是 ESR 所写的 TAOUP,即 The Art of UNIX Programming(UNIX 编程艺术)。

哲学

Unix 的设计哲学总体上可以概括为以下几点:

  1. 模块原则:使用简洁的接口拼合简单的部件
  2. 清晰原则:清晰胜于机巧
  3. 组合原则:设计时考虑拼接组合
  4. 分离原则:策略同机制分离,接口同引擎分离
  5. 简洁原则:设计要简洁,复杂度能低则低
  6. 吝啬原则:除非却无它法,不要编写庞大的程序
  7. 透明性原则:设计要可见,以便审查和调试
  8. 健壮原则:健壮源于透明与简洁
  9. 表示原则:把知识叠入数据以求逻辑质朴而健壮
  10. 通俗原则:接口设计避免标新立异
  11. 缄默原则:如果一个程序没什么好说的,就沉默
  12. 补救原则:出现异常时,马上退出并给出足够错误信息
  13. 经济原则:宁花机器一分,不花程序员一秒
  14. 生成原则:避免手工hack,尽量编写程序去生成程序
  15. 优化原则:雕琢前先要有原型,跑之前先学会走
  16. 多样原则:决不相信所谓“不二法门”的断言
  17. 扩展原则:设计着眼未来,未来总比预想来得快
Read more »

正向连接与反向连接

正向连接即黑客主动连接受害者,这种情况下要求受害者有公网IP,常用于对服务器的渗透;反向连接即受害者主动连接黑客,这种情况下要求黑客有公网IP,常用于对个人的渗透。

正向代理与反向代理

在英语中,Proxy表示服务器代理这种动作,而Agent表示代理服务器这种物质,显然,我们这里讨论的是Proxy这种动作,而非代理服务器本身。
不论正向还是反向,代理都是基于这样一个事实:即A与B的通信要经过C的转发,这里的C就是Agent,为了方便讨论,我们将A视为客户端,将B视为服务器端。
正向代理(Forward Proxy):也就是常说的代理,代理服务器偏向于客户端,服务器端只能得到代理服务器的IP地址,隐藏了客户端的IP地址。常用于科学上网工具。
反向代理(Reverse Proxy):代理服务器偏向于服务器端,客户端只能得到代理服务器的IP地址,隐藏了服务器端的IP地址。常用于网站镜像等。

Read more »

XML、JSON 与 YAML 是三种常见的信息标记形式,这三者由于其特有的属性而在不同的领域广为使用。

XML

XML,Extensible Markup Language(可扩展标记语言),倘若我要表示某个人的简要信息,用 XML 可写为:

1
2
3
4
5
6
7
8
9
10
<person>
<firstName>Tian</firstName>
<lastName>Song</lastName>
<address>
<streetAddr>中关村南大街5号</streetAddr>
<city>北京市</city>
<zipcode>100081</zipcode>
</address>
<prof>Computer System</prof><prof>Security</prof>
</person>

JSON

JSON,JavaScript Object Notation(JavaScript 对象表示法),倘若我要表示某个人的简要信息,用 JSON 可写为:

1
2
3
4
5
6
7
8
9
10
{
"firstName" : "Tian",
"lastName" : "Song",
"address" : {
"streetAddr" : "中关村南大街5号",
"city" : "北京市",
"zipcode" : "100081"
},
"prof" : ["Computer System", "Security"]
}

YAML

YAML,在开发这种语言之初,其意为 Yet Another Markup Language(仍是一种标记语言),之后为了强调这种语言以数据作为中心,而不是以标记语言为重点,故解释为 YAML Ain't a Markup Language(YAML 不是一种标记语言),倘若我要表示某个人的简要信息,用 YAML 可写为:

1
2
3
4
5
6
7
8
9
firstName : Tian
lastName : Song
address :
streetAddr : 中关村南大街5号
city : 北京市
zipcode : 100081
prof :
-Computer System
-Security

比较

XML 是最早的通用信息标记语言,可扩展性好,但繁琐,主要用于 Internet 上的信息交互与传递,以及用户界面的编写,比如 Android;JSON 中的信息有类型,适合程序处理(js),较 XML 简洁,主要用于移动应用云端和节点的信息通信,无注释;YAML 信息无类型,文本信息比例最高,可读性好,主要用于各类系统的配置文件,有注释易读。

Markdown 是一种轻量标记语言,其文件后缀名为 .md,它允许人们采用其规定的语法编写文档,而后 Markdown 解析器会将其转化为有效的 HTML 文档,以便在网页中显示,时至今日,有许多 Markdown 解析器增强了 Markdown 的基本语法,这就造成了 Markdown 有多种风格(flavor)。

因为 Markdown 要被转化为 HTML 才能在网页上显示,所以在 Markdown 中仍然可以使用 HTML,如果有 Markdown 无法完成的工作,完全可以再用回 HTML。

基本语法

标题

1
2
# 一级标题
#### 四级标题

对应 HTML,最高 6 级标题。

列表

1
2
3
4
5
6
7
8
9
- 无序列表项
- 这是是嵌套列表项
- 这里也是嵌套列表项
- 无序列表项
- 无序列表项

1. 有序列表项
2. 有序列表项
3. 有序列表项

无序列表项常以 - 或 * 起始,个人习惯使用 -。

Read more »

本笔记记录自ud0419-无人驾驶第一课:从Apollo起步。

一、无人驾驶概览

无人驾驶车的6个等级:

  • 0级——基本等级:驾驶员是系统的唯一决策者。
  • 1级——驾驶员辅助(Driver Assistance):车辆为驾驶员提供转向或加速支持,驾驶员必须保持充分参与。
  • 2级——部分自动化(Partial Automation):车辆自动控制几项功能,如自动巡航控制和车道保持,但是驾驶员仍然必须执行自治系统处理的任何功能。
  • 3级——有条件的自动化(Conditional Automation):车辆自主驾驶,但驾驶员必须准备在必要的时候随时接管。
  • 4级——高度自动化(No Human Interference):车辆控制驾驶体验的所有面面,并且不期望驾驶员的介入,车辆可能根本没有方向盘或任何驾驶员控制装置,但是车辆可能被限制在某些区域,通常这被称为“地理围栏”,车辆可以在特定的地理围栏内完全自主的运行,但是在地理围栏之外,车辆不能自主操作,或者根本无法操作。
  • 5级——完全自动化(Full Automation):车辆可以在人类可以驾驶的任何地方完全自主地运行,在所有情况下应与人类驾驶员的水平一样高或比其更高。
Read more »

PowerShell 是微软用来取代 CMD 的一个强大的 Shell。

版本

在不同版本的 Windows 中已经内置了不同版本的 PowerShell,常见情况如下:

  • Windows XP SP2 / Server 2003 SP1:PowerShell 1.0
  • Windows 7 / Server 2008:PowerShell 2.0,此版本包含了 PowerShell ISE,即 Integrated Scripting Environment(集成的脚本环境),更方便的编写 PowerShell 脚本。
  • Windows 8 / Server 2012:PowerShell 3.0,从此版本开始,PowerShell 被集成进了 WMF 中,即 Windows Management Framework(Windows 管理框架)。
  • Windows 8.1 / Server 2012 R2:PowerShell 4.0
  • Windows 10:PowerShell 5.0,此版本的 WMF 包含了 PowerShellGet,可用于在线下载、安装模块。
Read more »

为了方便快速的下载Windows更新,微软在Windows10中启用了一种新的更新机制,即传递优化(Delivery Optimization),这本质上是一种P2P架构,换句话来说,倘若开启了传递优化功能,更新时将会额外的从别的已更新的且开启传递优化功能的电脑上下载,同时也会上传已更新的文件到需要更新的电脑上。值得注意的是,传递优化对局域网进行了特殊处理,即当局域网内一台电脑完成更新后,传递优化会使得此局域网内的其他电脑依次完成更新。
开启或关闭传递优化的设置路径为:设置 ——> 更新和安全 ——> Windows更新 ——> 高级选项 ——> 传递优化。传递优化用于上传的文件路径位于:C:\Windows\Logs\dosvc。

0%