今天matlab上机课,xxx男老师又叨叨一大堆,什么字符转化数值和数值转化为字符,听者有心,讲者无心,其间还讲错一个例子,很是无语.
他讲到数值转化为字符型时候,提到密码学.我随便试了试下列代码:
a = [20013 21335 22823 23398 25968 23398 38498];
setstr(a)
ans =中南大学数学院
s =[73 32 97 109 32 104 97 112 112 121 32 116 111 100 97 121 46]
>> setstr(s)
ans =I am happy today.
上面看起来效果还可以,其实密码学不是上述如此简单的字符与数值型的转换.忽然想到电影<无间道>里面提到的摩丝密码,到网上随便找了一圈,真的还一大堆的东西.
密码学:
密码学是一门研究秘密信息的隐写技术的学科
密码学技术可以使消息的内容对(除发送者和接收者以外)的所有人保密.
可以使接收者验证消息的正确性,是解决计算机与通信安全问题重要技术之一.
基本术语:
密码技术(Cryptography)—把可理解的消息变换成不可理解消息,同时又可恢复原消息的方法和原理的一门科学或艺术。
明文(plaintext )--变换前的原始消息
密文(ciphertext) --变换后的消息
密码(cipher )--用于改变消息的替换或变换算法
密钥(key )--用于密码变换的,只有发送者或接收者拥有的秘密消息
编码(encipher /encode)--把明文变为密文的过程
译码(decipher /decode)—把密文变为明文的过程
基本概念:Encryption 把明文变成密文的加密函数 C = EK(P)
Decryption 把密文变成明文的加密函数 P = EK-1(C)
key –用于加密或解密的秘密参数, 选自密钥空间 K
(一般情况下,可以把密码系统理解成可逆的密码算法、密钥空间,即:加密算法:EK; K in K : P -> C,及唯一逆算法:P = EK-1; K in K : C -> P )
*通常密码系统是公开的, 只有密钥是秘密信息*
密码学算法大致分为:
私钥加密算法(private-key encryption algorithms )
----分组密码,-----流密码
公钥加密算法(public-key encryption algorithms)
数字签名算法(digital signature algorithms )
哈希函数(hash functions)
密码分析(又可称为攻击):
<密码分析学是指在没有加密密钥的情况下,攻击密文的过程>
唯密文攻击 (ciphertext only )
--只知道算法与一些密文
--利用统计方法
--需要能够识别明文
已知明文攻击(known plaintext )
----知道一些明文/密文对
----利用已知的明文密文对进行攻击
选择明文攻击(chosen plaintext )
----能够选择明文并得到响应的密文----利用算法的结构进行攻击
选择密文攻击(chosen ciphertext )
----能够选择密文并得到对应的明文
----利用对算法结构的知识进行攻击
选择明文-密文对攻击(chosen plaintext-ciphertext )
----能够选择明文并得到对应的密文或选择密文并得到对应的明文
----利用对算法结构的了解进行攻击
穷密钥搜索
理论上很简单,对每个密钥进行测试
最基本的攻击方法,复杂度有密钥量的大小决定
假设可以对正确的明文能够识别
*无条件安全与计算安全
无条件安全(unconditional security)
由于密文没有泄露足够多的明文信息,无论计算能力有多大,都无法由密文唯一确定明文。
计算安全(computational security )
----在有限的计算资源条件下,密文不能破解。
(如破解的时间超过地球的年龄)
摩丝密码: http://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81
维热纳尔密码: http://baike.baidu.com/view/1746628.htm?func=retitle
看完后还突发奇想编一个类似于密码翻译器的程序,后来看到网上形形色色的软件那么多,我就不献丑了,最多验证一下转译得是否正确.
有时间的话可以随便编一个玩一玩。