这就需要对字符串进行加密处理。但是在安装制作软件(我用的是InstallShield 12)中没有提供专用的加密方法,而且在InstallShield中加密过的字符串在Asp.Net(我用的是C#编写Asp.Net)中要能够被解密,则必须用两者通用的加密解密方法。因此我想到,每个字符的ASCII码都是通用的,只要在InstallShield中对字符的ASCII码进行处理,比如加一或移位,得到一个新的字符串,再到C# 中进行逆向操作,就可以还原为原来的字符串。
在寻思用什么方法加密的时候,偶然想到曾经在一外网站上下载的一段代码,赶紧找将出来(后来还幸运地回忆起那个网站,那就是非常有名的InstallSite,大家可以上去逛逛,那里有很多InstallShield的脚本示例代码,可以下载参考参考) ,他的源码如下:
这段代码返回的是一个求和的数字,并不完全符合我们的要求,而且我发现cChar=szLeft[0]的取值是有问题的.大家注意到没有,代码作者也在注释中有说明.也不知道InstallSite为什么把这种有问题的代码作放在网站上,还居然作为Sample供下载.
于是将其改造了一番:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// string2password.rul
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1
function STRING String2Password(szName )
2
STRING szRight, szLeft,szAnswer;
3
CHAR cChar;
4
NUMBER nLength;
5
6
begin
7
8
szAnswer = "";
9
nLength = StrLength(szName);
10
while (nLength > 0)
11
StrSub(szRight, szName, 1, (nLength-1));
12
StrSub(szLeft, szName, 0, 1);
13
cChar = STRTOCHAR(szLeft);
14
cChar = cChar +1;
15
szName = szRight;
16
CharReplace(szLeft,STRTOCHAR(szLeft),cChar,0)
17
szAnswer = szAnswer + szLeft;
18
nLength = nLength - 1;
19
endwhile;
20
return szAnswer;
21
end;
//
// string2password.rul
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
至于C#的解码就很简单了,这里也一并贴出来,凑个数吧:
1
public string password2string(string sPass)
2
}
2
小结:这里为了说明问题只是用了加1减1的方法,非常简单.我正在研究基于XXTea的加密方法,等有了结果在公布出来.