文章详情
古典密码学基本原理和Base64算法原理
密码学,就是研究如何将一个内容(可以是字符串、文件、二进制流)通过一系列算法转换成另一种内容的学科。从广义上来看,有一个算法可以将字符串转换成另一个字符串即可,即该算法可逆不可逆都可以;从狭义上来看,该算法可以加密但同时需要解密。
不管你有没有专门学过密码学,我敢保证,你一定无时无刻不在接触它。举个例子,你开发的应用程序基本都会包含注册登录功能,而注册登录一般都会有“密码”字段,你将“密码”存入数据库时,都会调用加密算法;再比如,为了保证接口的安全性,你可能会提供“Token”字段,后台通过校验“Token”的合法性来判断当前接口请求者是否合法,这里的“Token”往往也会采用加密算法来生成。
如果你没有学过密码学,上述这些例子你只是在应用阶段,知道怎么调用前人已封装好的算法来加密你的数据。你可能会想,我知道一般的加密算法,我也知道怎么使用它,无需了解其底层原理,也不会影响我的应用安全,我也能保证应用安全。可事实真的是如此吗?
这里我不妨给你做个假设。假设你不懂密码学,你只知道怎么使用加密算法来加密你的数据,会出现什么事呢?在某一天,因为某种原因,你存储在服务器的加密密钥被泄露了,黑客又知道你的系统是使用的何种加密算法,而加密算法一般是公开的,这时你的加密数据在黑客面前就变得透明;但如果你知道这些加密算法的底层原理,你就可以针对公开的加密算法来做微调,变成了你自己的加密算法,即使黑客知道你用的是何种加密算法,也无法在短时间内破解。
当然,上述例子可能会比较极端,但也不是没有可能。学好密码学,更重要的一点是更有助于你的职业发展。比如,你的老板让你开发一款安全级别要求很高的系统,需要你提供一套完整的加密方案,如果你不懂密码学,你就不知道怎么规划加密算法。我在这里提到的学习密码学,并不是说你能够自己设计一套加密算法,你只需要了解现有的常用加密算法的底层实现原理就够了。
提到密码学,你可能首先会想到DES、AES、RSA等这些加密算法。没错,它们都属于密码学要学习的范畴。密码学是一个很宽泛的概念,要精通密码学需要很深厚的数学功底,本文也不会教你怎么实现自己的加密算法,但是会带你研究已公开的加密算法。
加密算法那按照年代可以分为古典密码和现代密码,按照密钥的对称方式可对称加密和非对称加密。当然,还有一些算法从狭义上来讲不属于加密算法,但是可以将其归为密码学的范畴,比如MD5、SHA1、Base64等。
本文我会带你了解古典密码学和Base64的算法原理。
古典密码学
密码学的出现最初是应用于军事上,如果你看过古装电视剧应该知道,在古代,人们传信一般通过飞鸽传书、鸿雁传书等方式。普通老百姓用明文来传递倒也没什么,如果在战争中,友军之间用明文来传书,中途被敌人拦截下来,后果将非常严重,很有可能就把本方的军事部署给泄露了。于是,人们想到了通过一些手段,将明文的内容转成密文,并在全军中通告解密方法。这样一来,即使敌人截获了情报,也无法获取有效的内容,这就是古典密码。
古典密码不像现在的密码,运用了各种数学原理,它的算法也都比较简单,但也分了很多种。接下来,我将带你了解一些比较著名的古典密码。
凯撒密码
在古罗马,有一位非常著名的帝王--凯撒大帝。相传,凯撒大帝为了保护本方重要的军事信息,发明了一种加密方法,用于在军队之间传信,后人称其为凯撒密码。
凯撒密码的算法非常简单,其基本方法为:将字母表A-Z和a-z按顺序排列,设定一个偏移值,比如设置为3,那么加密时对应位的字母依次向后偏移3位,比如字母A,偏移后的密文就是D,大小写要区分,如果为a,则偏移后为d。解密时,密文依次向前偏移3位即可。(注:如果向后偏移值超出后,又继续从第一个字母开始)
凯撒密码只会加解密字母,遇到其他字符,则会明文输出。
思考:请用凯撒密码加密字符串:4fEdw2F(偏移值:5)。
栅栏密码
栅栏密码,就是将明文分为N行(这里的N不固定),然后将字母在N行间交替输出,最后,将每行字母按顺序排列出来,就是密文。我描述的可能比较抽象,下面,我通过有一个实际的例子带你了解栅栏密码。
比如有一段文本:I Love You。我们分为两行(这里的N=2)如下:
I o e o
L v Y u
最后连成一行形成密文:IoeoLvYu。
解密时,将密文分为两行:
I o e o
L v Y u
最后上下交替输出,还原出明文:I Love You。
思考:请用栅栏密码加密字符串:The Dog is Cute。(N=3)
维吉尼亚密码
维吉尼亚密码由凯撒密码组成密码字母表,加解密时通过查询密码字母表得出明文和密文的映射关系。下图就是一种维吉尼亚密码字母表。
其中,我们设定列代表明文,行代表密钥。
比如我们要加密字符串:YOUAREMYLOVE,密钥为ABCDE。明文为12个字符,密钥只有5个字符,因此需要将密钥补齐12位,补齐后的密钥为:ABCDEABCDEAB。从第一个字母Y开始,它对应的密钥为A,我们从密码字母表中找到A行Y列对应的字母为Y,第二个字母为O,密钥为B,找到B行O列的字母为P,依次类推,最终得到的密文为:BPWDVENAOSVF。
思考:请用维吉尼亚密码加密字符串:ILIKE(密钥为:YO)。
上一文章:加密算法有几种形式,各有什么不同?
下一文章:批量文件夹名称前面加指定字符
相关推荐
- 01-13程序员工资一般多少钱一个月?
- 12-07Linux逆向之hook注入代码
- 12-16网络安全自查报告怎么写?自查报告范文
- 06-19世界最著名的黑客大战,中美黑客大战
- 09-09网络安全有哪些职业方向?
- 10-28零基础怎么学黑客,黑客零基础入门
- 06-05机械键盘灯光怎么维修?
- 03-10新手怎么学代码编程?如何学代码和编程
- 06-152001年中美黑客大战 中国8万红客为国反击
- 02-28如何成为全栈程序员?
- 09-08想当黑客要学什么专业?黑客属于什么专业
- 06-02用名片查企业,还能提升芝麻信用分?
- 05-06软件开发工资一般多少?
- 01-14新型漏洞:反向标签钓鱼攻击Reverse Tabnabb