2.6 使用加密函数
在很多应用系统中需要用到加密功能,如电子商务系统中,传递客户付款信息时,银行与支付中心进行信息交换时都必须实行加密。将来的云计算应用中要实现将客户信息安全的保存在远程数据库中,我想也必须实现可靠的加密处理。本节将介绍一组PHP的加密解密函数,以及其相关的应用,希望对加密/解密感兴趣的读者有所帮助。
要点
什么是加密处理
一句话来概括加密处理过程就是,采用一个算法将明文变成暗文的过程。PHP的库函数已经提供一系列这种加密函数,如escape,urlEncode,md5等。但是这些函数是不能直接应用在如传送客户支付信息的实际应用中去的,为什么呢?因为使用escape这样的函数加密时,第三方得到暗文后,再使用PHP提供的对应解密函数unescape可以很方便地将其变为明文,没有密码可言了。而md5函数进行加密后的暗文是个不可逆的,也就是说拿暗文的一方,没办法还原成明文。
实际的加密/解密处理是,在将明文加工(加密算法)成暗文的过程中,会使用一个称为密钥的字符串。接受方只有在暗文转化(解密算法)为明文的过程中使用这个密钥,才能正确地还原成明文。对于怀有恶意的第三方就算得到了暗文,也知道加密/解密算法,因为没有密钥,不能解密明文的内容(当然前提是密钥不易被猜测出,加密/解密算法有一定的复杂度)。
目录结构
本例代码
定义加密函数,参数$txt为明文,$key为密钥。
调用md5函数生成暗文的基础字符串。
7到10行对明文字符串进行循环处理,生成新的字符串。
先调用passport_key函数,结合密钥字符串生成暗文后,再调用base64_encode函数进行代码转换。
定义解密函数。
先调用base64_decode函数对暗文进行代码逆转换,再调用passport_key函数进行剥离密钥的处理。
17行至20行还原明文。其过程与加密函数中的相关过程相逆。
使用md5函数转化密钥,无论密钥字符串的长度,md5函数都将生成长度为64的字符串。
调用passport_encrypt函数进行加密处理。
调用passport_decrypt函数进行解密处理。
调用serialize函数对数组进行系列化处理。
调用unserialize函数进行反系列化处理。
补充
加密函数的应用之一——实现不同主机间的Session信息的共享
假如一个公司有一个网站和有一个论坛,主机(host)不同。两个地方都有注册和登录,但又不想让用户在主页登录后跳转到论坛的时候Session失效,即从任何地方登录一次后就可以浏览这两个网站。其实质是实现不同主机间的Session信息的共享。可以使用本节介绍的加密函数来实现这个不同网站间的跳转。
那要怎样来处理用户的Session呢?网页都是无状态的,如果要在新的网页中继续使用Session,则需要把Session从一个地方移到另一个地方,可以通过GET的方式来传递它。而PHP有个处理Session的全局变量$_SESSION,在接收方将传过来的信息设置到$_SESSION中即实现了Session信息的共享。传送方的代码如下。
先用serialize函数将$_SESSION进行系列化,然后通过passport_encrypt函数对其进行加密,为了防止料想不到的编码,使用urlencode函数进行了转换。接收方的主要代码如下。
先用$_GET[“s”]获取URL的参数,然后用passport_decrypt将其解密,再用unserialize将其数据还原成原始数据。当然随后就可以调转到相应的页面了。
共有条评论 网友评论