?????????一般情況下,Asp.Net程序中,數據庫連接字符串大多存儲在配置文件中。如果程序不是手工發布,而是通過安裝程序部署,那么通常在安裝過程中需要用戶輸入數據庫管理員帳號和密碼,以便安裝數據庫。同時將管理員帳號和密碼以及數據庫服務器地址(或者數據庫連接字符串)寫入配置文件中。但是如果不加密,尤其是數據庫管理員密碼,若以明碼形式存儲,極容易被竊取。
???????? 這就需要對字符串進行加密處理。但是在安裝制作軟件(我用的是InstallShield 12)中沒有提供專用的加密方法,而且在InstallShield中加密過的字符串在Asp.Net(我用的是C#編寫Asp.Net)中要能夠被解密,則必須用兩者通用的加密解密方法。因此我想到,每個字符的ASCII碼都是通用的,只要在InstallShield中對字符的ASCII碼進行處理,比如加一或移位,得到一個新的字符串,再到C#?中進行逆向操作,就可以還原為原來的字符串。
????????在尋思用什么方法加密的時候,偶然想到曾經在一外網站上下載的一段代碼,趕緊找將出來(后來還幸運地回憶起那個網站,那就是非常有名的 InstallSite ,大家可以上去逛逛,那里有很多InstallShield的腳本示例代碼,可以下載參考參考) ,他的源碼如下:
/**/
//////////////////////////////////////////////////////////////////////////////
/
//
//
//
?Function:?String2Password
//
//
//
//
??Purpose:?This?function?takes?a?string?and?returns?a?numeric?equivalent???
//
//
???????????of?all?the?character's?ASCII?values?added?together.
//
//
???????????(Note:?InstallShield?may?use?different?values?than?the?ASCII????
//
//
???????????table
I?did?not?verify?this.)
//
//
//
/**/
//////////////////////////////////////////////////////////////////////////////
/
function?String2Password(?nAnswer,?szName?)
???? STRING?szRight,?szLeft;
???? CHAR???cChar;
???? NUMBER?nLength;
?begin
?????? nAnswer?
=
?
0
;
?????? nLength?
=
?StrLength(szName);
???
??? while
?(nLength?
>
?
0
)
????????StrSub(szRight,?szName,?
1
,?(nLength
-
1
));
????????StrSub(szLeft,?szName,?
0
,?
1
);
????????cChar?
=
?szLeft[
0
];
????????
if
?(cChar?
<
?
0
)?then
???????????? cChar?
=
?cChar?
&
?
255
;
????????endif;
????????szName?
=
?szRight;
????????nAnswer?
=
?nAnswer?
+
?cChar;
????????nLength?
=
?nLength?
-
?
1
;
???endwhile;
?end;
????????這段代碼返回的是一個求和的數字,并不完全符合我們的要求,而且我發現cChar=szLeft[0]的取值是有問題的.大家注意到沒有,代碼作者也在注釋中有說明.也不知道 InstallSite 為什么把這種有問題的代碼作放在網站上,還居然作為Sample供下載.
??????? 于是將其改造了一番:
???????
??????? 至于C#的解碼就很簡單了,這里也一并貼出來,湊個數吧:
??????? 小結:這里為了說明問題只是用了加1減1的方法,非常簡單.我正在研究基于XXTea的加密方法,等有了結果在公布出來.
???????? 這就需要對字符串進行加密處理。但是在安裝制作軟件(我用的是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
????
{
?3
????????
string
?sResult?
=
?
string
.Empty;
?4
????????
for
?(
int
?i?
=
?
0
;?i?
<
?sPass.Length;?i
++
)
?5
????????
{
?6
????????????
int
?num?
=
?(
int
)
char
.Parse(sPass.Substring(i,
1
))?
-
?
1
;
?7
????????????sResult
+=
((
char
)num).ToString();
?8
????????}
?9
????????
return
?sResult;
10
????}

?2


?3

?4

?5


?6

?7

?8

?9

10

??????? 小結:這里為了說明問題只是用了加1減1的方法,非常簡單.我正在研究基于XXTea的加密方法,等有了結果在公布出來.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
