编码学习的笔记
密码学从古典密码的替换、置换到机械密码再到现代密码学,这是个漫长的过程。
最近看了一本《编码:隐藏在计算机软硬件背后的语言》,对编码有了一些体会,做个笔记。(笔记部分选取书内,)
前言
先来个小彩蛋
记事本输入“联通”,然后保存,再打开,发现乱码,大概这个样子
而“移动”重复这样操作就没有这种情况,戏称为“联通不如移动”。
原因是:
而这种情况是因为windows默认编码是GB2312,“联通”的联GB2312编码为\uc1aa,二进制为110000110101010,是按八位一组与UTF8的编码对应,使得windows误认为是UTF-8的文件。
古典密码CTF上并不是感觉很让人有什么兴趣,毕竟工具多基本上就能出来,但CTF不过是竞赛,与真实世界的模拟还有一定距离,在密码学划了一段时间水后,找到了一些好的资料,蛮有意义。
本质上来说,编码更多是的交流,而不是加密保护机密,比如GBK2312的汉语编码,在现在加密更多的是现代密码学。
摩尔斯密码(Morse code)
又称为莫斯密码(翻译问题)
只有点(bot)和划(dash)的古典密码,应用上有很多替代的方式,比如0和1代替点和划线,中间用/或者空格代替,又或是音频里面其中一个声道的电平可以用来制作摩尔斯密码。
特点:
-
只有两个字符
-
字符间隔:“.”为1t,“———”为3t,两个之间1t,字符间3t,字间7t。
附上一个快速记下摩尔斯密码的树形图。(原图太模糊,重新做了一个)
进制的转换
2进制:Binary
8进制:Octal
10进制:Decimal
16进制:Hexadecimal
顾名思义,二进制每个位数为0-1,八进制即为0-7,16进制为0-f(其中a-f代表10-15)。
简单的计算过程:
二进制到十进制 如10010,
10010 = 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 1 × 2 1 + 0 × 2 0 10010=1\times2^4+0\times2^3+0\times2^2+1\times2^1+0\times2^0 10010=1×24+0×23+0×2