Crypto基础
密码学是研究编制密码和破译密码的技术科学,本文将主要介绍密码学中常见的几种加密方式的原理以及实际的应用,并以攻防世界新手练习区例题为例进行分析。
Base64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
加密原理Base64中的64表示64个可打印的字符(具体范围如下表所示),而要完全表示64个不同的字符至少需要6位二进制数(2^6=64),我们知道一个字符类型数据在计算机中占用1Byte的存储空间,而1Byte为8bit,即一个字符实际在计算机中存储的是一个8位二进制数。
Base64加密的实质是将每三个8bit字节转换为四个6bit字节(8*3=4*6),再在6bit字节的高位添0以补全为8位,最终转换为四个8bit字节,完成加密。例如:字符串s13,对应的ascii码为115 49 51,转换为二进制:01110011 00110001 0011001 ...
CSharp事件和委托
委托与事件在开发中的应用非常广泛,本文将简单介绍C#中委托和事件的定义、使用方法,以及它们之间的区别和联系。
委托C#中的委托(delegate)类似于C/C++中的函数指针,是一种存在对某个方法的引用的引用类型变量,所有的委托都派生自System.Delegate类。
委托的声明声明委托的语法如下:
delegate <return type> <delegate name> <parameter list>
比方说,我要声明一个无返回值,无参数的委托。
public delegate void MyDelegate();
在声明了委托类型后,必须将其实例化才能生效,可以使用new关键字创建并传入参数(参数为一个特定的方法名)。
MyDelegate myDelegate = new MyDelegate(Func1);
以上实例中我们实例化了一个带有Func1方法引用的MyDelegate类型变量,并将其赋值给了myDlegate实例。
委托的调用如果想让委托调用它所引用的方法,可以直接仿照方法调用的写法。
myDelegate();
多播委托其实一个委托类型的 ...
文件路径的表示方法
文件路径作为计算机基础内容,在很多时候都扮演着十分重要的角色,例如控制台命令、资源文件的存放等等,以下将介绍计算机文件路径的表示方法以及一些常见的使用场景。
文件路径的表示分为两种方式:绝对路径表示法和相对路径表示法。
绝对路径与相对路径的区别绝对路径的表示绝对路径顾名思义就是文件在硬盘上存储的真正路径,它不会被更改,除非文件在硬盘中的位置发生改变。绝对路径表示格式为:“\<硬盘符>\\<目录1>\\<目录2>…\\<文件名>”,例如test.txt文件存储在C盘cat1下的cat2的cat3中,它用绝对路径表示为C:\cat1\cat2\test.txt。
相对路径的表示相对路径表示从当前文件位置出发,指向目标文件的路径,它是目标文件与当前文件的相对位置,会随着当前文件位置的不同而使与同一文件的相对位置发生改变。相对路径的表示格式为:“./\<目录1>/\<目录2>…/\<文件名>”(这里的“./”可以省略),例如当前HTML文件root.html位于C盘根目录下,text.txt文件存储在C盘cat1文件夹下的cat2文件夹中,要想在ro ...
让批处理文件中的中文正常显示
最近在学习DOS命令和批处理相关内容的时候,遇到了点问题,就是在执行包含中文的批处理文件时,中文无法正常显示,在查阅了相关资料之后,了解了一些编码相关的内容。
原因编码相关的那些事现在主要的两种编码格式为UTF-8和ANSI。
ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xffff来编码,即扩展的ASCII编码。
为了应对不同国家和地区的使用,ANSI编码存在很多不同的标准:由于汉字的种类非常多,而一个字节(Byte)最多只能表示2^8 = 256种文字与符号,这肯定是远远不够的。因此在中国、日本、韩国等采用象形字符的地区,通常采用双字节字符集的方式来表示文字符号,即采用两个字节来表示一个字符。在简体中文系统下采用的是GBK标准,比如汉字“字”就使用[0xd7,0xd6]两个字节进行存储。系统会根据计算机语言来确定ANSI的标准,当然也可用手动更改。
UTF-8(8位元,Universal Character Set/Unicode Transformation Format ...
开始写个人博客了
博客搭建经过两天的折腾,利用Hexo框架和github托管的方式搭建的静态博客也算有了个雏形,这两天将继续对其进行美化以及添加新功能,今后打算在这里不定期分享一些自己感兴趣的编程、数码、游戏相关的内容。
搭建博客的目的一方面是想锻炼自己的表达能力(我在这方面确实有所欠缺),另一方面也是想将自己感兴趣的内容分享出去,既加深了自己对知识的理解,也能让他人学到新东西。
博客的内容包含但不限于编程、游戏、数码相关内容,只要是我觉得有分享价值的东西,都有可能出现在博文中。