PHP 的内置函数,通过 DES 算法对数据加密和解密
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可
读的一段代码,通常称为密文,使其只能在输入相应的密钥之后才能显示出本来内容,通
过这样的途径来达到保护数据不被非法人窃取、阅读的目的
由于项目的需要,要写一个能生成
“授权码”的类(授权码主要包含项目使用的到期时间),
生成的授权码将会写入到一个文件当中,每当项目运行的时候,会自动读取出文件中的密
文,然后使用唯一的
“密钥”来调用某个函数,对密文进行解密,从中解读出项目的使用到
期时间。
之前,自己有先试着写了下,主要是
base64+md5+反转字符串。算法太过简单,很容易被破
解,而且也没有能过做到
“密钥”在加解密中的重要性,故而舍之。
后来,查找了相关资料,发现,原来
PHP 中内置了一个功能强大的函数库,即 Mcrypt。
其实,
mcrypt 本身就提供了强大的加密解密方法,并且支持很多流行的公开的加密算法,
如
DES, TripleDES, Blowfish (默认), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA,
RC2
and
GOST in CBC, OFB, CFB
and
ECB。
这里简单的引用下百度百科关于
“加密算法”的解释:
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为
不可读的一段代码,通常称为
“密文”,使其只能在输入相应的密钥之后才能显示出本来内
容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。
该过程的逆过程为解密,
即将该编码信息转化为其原来数据的过程。
加密技术通常分为两大类:
“对称式”和“非对称式”。
对称式加密就是加密和解密使用同一个密钥,通常称之为
“Session Key ”这种加密技术
目前被广泛采用,如美国政府所采用的
DES 加密标准就是一种典型的“对称式”加密法,它
的
Session Key 长度为 56Bits。
非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为
“公
钥
”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对
外公布的,
“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的
加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能
被别窃听到。而非对称式的加密方法有两个密钥,且其中的
“公钥”是可以公开的,也就不怕
别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全
性问题。
前面提到过,
mcrypt 支持多种国际公开的算法,我在这次的项目中使用的是 DES 算法,
DES(Data Encryption Standard),这是一个对称算法,速度较快,适用于加密大量数据的
场合。
接下来我简要的说明下加密类中会使用到的几个函数。
--------------------------------------------------------------------------------
resource mcrypt_module_open ( string
$algorithm
, string
$algorithm_directory
, string
$mode
,
string
$mode_directory
)
参数
$algorithm
:要使用的算法,可以通过函数
mcrypt_list_algorithms()来查看所有支持的
算法名称