C 版本的discuz authcode函式

2022-07-20 06:18:12 字數 4472 閱讀 9583

根據網上流傳甚廣的乙個版本修改,修正了設定加密串過期時間expiry沒有效果的問題 。>>原始碼

<<

**using

system;

using

system.collections.generic;

using

system.linq;

using

system.web;

using

system.text;

namespace

api.common

;///

///c#版本 discuz authcode函式。根據網上版本修正設定expiry無效問題。by pwg17

///public

class

authcode

//////

從字串的指定位置擷取指定長度的子字串

//////

原字串

///子字串的起始位置

///子字串的長度

///子字串

private

static

string

cutstring(

string

str, 

intstartindex, 

intlength)

else}if

(startindex 

>

str.length)

}else

else

else}}

if(str.length 

-startindex 

<

length)

return

str.substring(startindex, length);

}///

///從字串的指定位置開始擷取到字串結尾的了符串

//////

原字串

///子字串的起始位置

///子字串

private

static

string

cutstring(

string

str, 

intstartindex)

//////

md5函式

//////

原始字串

///md5結果

public

static

string

md5(

string

str)

return

ret;

}///

///用於 rc4 處理密碼

//////

密碼字串

///金鑰長度,一般為 256

///private

static

byte getkey(byte pass, int32 klen)

int64 j =0

;for

(int64 i =0

; i 

<

klen; i++)

return

mbox;

}///

///生成隨機字元

//////

隨機字元長度

///隨機字元

private

static

string

randomstring(

intlens)

;int

clens 

=chararray.length;

string

scode =""

;random random 

=new

random();

for(

inti =0

; i 

<

lens; i++)

return

scode;

}///

///使用 authcode 方法對字串加密

//////

原始字串

///金鑰

///加密字串有效時間,單位是秒

///加密結果

public

static

string

discuzauthcodeencode(

string

source, 

string

key, 

intexpiry)

//////

使用 discuz authcode 方法對字串加密

//////

原始字串

///金鑰

///加密結果

public

static

string

discuzauthcodeencode(

string

source, 

string

key)

//////

使用 discuz authcode 方法對字串解密

//////

原始字串

///金鑰

///解密結果

public

static

string

discuzauthcodedecode(

string

source, 

string

key)

//////

使用 變形的 rc4 編碼方法對字串進行加密或者解密

//////

原始字串

///金鑰

///操作 加密還是解密

///密文有效期, 加密時候有效, 單 位 秒,0 為永久有效

///加密或者解密後的字串

private

static

string

discuzauthcode(

string

source, 

string

key, discuzauthcodemode operation, 

intexpiry)

intckey_length =4

;string

keya, keyb, keyc, cryptkey, result;

key 

=md5(key);

keya 

=md5(cutstring(key, 0, 

16));

keyb 

=md5(cutstring(key, 

16, 

16));

keyc 

=ckey_length 

>0?

(operation 

==discuzauthcodemode.decode 

?cutstring(source, 

0, ckey_length) : randomstring(ckey_length)) : "";

cryptkey 

=keya 

+md5(keya 

+keyc);

if(operation 

==discuzauthcodemode.decode)

catch

catch

catch}}

result 

=encoding.getstring(rc4(temp, cryptkey));

long

timestamp 

=long

.parse(cutstring(result, 0, 

10));

if((timestamp ==0

||timestamp 

-unixtimestamp() 

>0) 

&&cutstring(result, 

10, 

16) 

==cutstring(md5(cutstring(result, 

26) 

+keyb), 0, 

16))

else

}else

}///

///rc4 原始演算法

//////

原始字串陣列

///金鑰

///處理後的字串陣列

private

static

byte rc4(byte input, string pass)

return

output;

}private

static

string

ascarr2str(

byte

b)public

static

long

unixtimestamp()

public

static

string

urlencode(

string

str)}}

return

tmp;

}public

static

long

time()}}

c 中的Debug版本和Release版本的區別

今天看visual c 2012 入門經典,書上描述 debug版本包括幫助使用者除錯程式的資訊,使用程式的debug版本,可以在出現問題時單步執行 以檢查程式中的資料值。release版本它不包括除錯資訊,但開啟了編譯器的 優化選項,以提供最高效的可執行模組。在使用除錯配置測試過應用程式,且看起來...

C 中的版本說明

assembly assemblyversion 1.1.assembly assemblyfileversion 1.0.0.0 assembly assemblyinformationalversion 1.2.1.0 用來定義 product version assemblyversion 儲...

C 版本掃雷

閒來無事,花了點時間寫了乙個簡單版本的掃雷,廢話不多數,開始今天的主題!掃雷簡單版玩法 控制台未加雙緩衝 進入掃雷介面後,按下空格,游標所在位置處會經行判斷,若是雷,則遊戲over,若是空白區域則展開地圖,若是帶有數字標誌的則僅展示改地圖塊,直至剩下雷區 看一下效果 難點 1.如何展示 2.如何初始...