插件在访问 Web 程序时,可以使用 Get 方法或 Post 方法提交数据,无论是哪种方法,按照 HTTP 协议的规范,参数总是按照以下格式提交(每对参数名/参数值以“&”号分隔):
参数名1=参数值1&参数名2=参数值2&参数名3=参数值3...
如果您没有使用SSL,所有的参数名和参数值都将以明文的形式通过网络传输到 Web 服务器,显然这种方式是很不安全的,为了保证插件与Web 程序的通讯安全,插件在提交参数前可以对每个参数值使用 Rijndael 加密算法进行加密处理,并使用 Base64 编码转换为可读字符串形式。
Rijndael 加密算法是一种高效的对称加密算法,它是 AES(Advanced Encryption Standard,高级加密算法标准)的实现,在加密和解密时有两个基本参数:初始向量和密钥,Web程序在进行解密时必须使用和插件端设置相同的初始向量和密钥。
下面分别列出了加密和不加密的例子各一个:
a. 不加密:Username=test&Password=123456&ClientIP=192.168.0.200&CurrentTime=2005-07-06+23%3a51%3a29
b. 加密:Username=ZtlBwgvwkS5YV98N9cgO%2fw%3d%3d&Password=vBSchK4dJX7Z2zfUatu9ZQ%3d%3d&CurrentTime=mpNifqRIvBV2xZi3d%2fPli6%2bZwR9BKHs4y6t%2bNS2QIr4%3d
在 Web 程序端必须使用相同的算法来解密各个参数值,具体如何实现取决与您所使用的 Web 程序语言,这就需要您找到特定语言的算法实现。解密一个参数值的过程包括下面三个步骤:
1. 使用 Base64 算法将参数值转换为字节数组;
2. 使用 Rijndael 算法将 1 中得到的字节数组解密得到另一字节数组;
3. 将 2 中得到字节数组用特定的字符集转换成字符串,即得到原始的数据。
插件安装目录下的“GVODClassLib.dll”文件包含了加密和解密的算法实现类 CryptoUtility,它的 Decrypt 方法可以直接将 Base64 编码后的密文解密为原文字符串,如果您的 Web 程序使用的是 asp.net 编写的,可以将该文件拷贝到您 Web 站点的“/bin”目录下,然后按照下面的例子完成解密:
<%@ page language="C#" %>
<%@ import namespace="Com.GVOD" %>
<%
//定义密钥,请改成你加密时使用的密钥
string key = "OEtxF/yyALd2NflVW4KSMspQIozPkSRL+mEdvlBAzUQ="
//定义初始向量,请改成你加密时使用的初始向量
string iv = "Cz3EXGTEMeIN8PXKFLiZWg=="
//定义密钥长度,请改成你加密时使用的密钥的长度
int keyLength = 256
//生成 CryptoUtility 类的实例
CryptoUtility util = new CryptoUtility(key, iv, keyLength)
//解密用户名
string username = util.Decrypt(Request["Username"])
//解密密码
string password = util.Decrypt(Request["Password"])
//解密其它参数
...
%>
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)