版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)窗口自適應(yīng)打印紙張大小
函數(shù)名:f_dw_Zoom
WrittenbyVial.Z
參數(shù):
datawindowdw_print-->要打印I為數(shù)據(jù)窗口
integernMinZoom->極限縮小比例(縮小范圍不能太大,否則不清晰)
返回值:
-1error
0找不到合適口勺值
>0找到"勺合理值
作用:
紙張大小滿足數(shù)據(jù)窗口口勺規(guī)定,返回100;
當(dāng)數(shù)據(jù)窗口寬度太大,元法在一頁紙張上打印時(shí),該程序?qū)ふ乙环N最佳縮小比例值,
使得數(shù)據(jù)窗口口勺內(nèi)容恰好能在目前設(shè)定的J紙張下打卬出來。
如窗口縮小到85%可以在一頁上打印時(shí),返回值為85
*/
ifnotlsValid(dw_print)then
return-1
endif
dw_print.object.datawindoiA/.print.preview=true/*預(yù)覽模式必須打開*/
dw_print.SetRedraw(FALSE)/*調(diào)整放大比例過程中,停止重繪控件,節(jié)省程序時(shí)間*/
stringls_H_Page/*水平打印占據(jù)日勺頁數(shù)*/
stringls_zoom/*設(shè)定的縮小比例整數(shù)值*/
Integerli_max=100/*從白,分百大小開始測(cè)試*/
integerli_min/*極限縮小值,最多縮小到nn%*/
Integerli_use/*目前測(cè)試值*/
Integerli_OK=0/*最優(yōu)可用值*/
Integerli_count=0/*算法循環(huán)執(zhí)行H勺次數(shù)*/
li_min=nMinZoom產(chǎn)賦最小測(cè)試值*/
li.use=li_max/*從原始大小(100)開始測(cè)試。逐漸縮小放大比例*/
dowhileli_min<=li_max
li_count++
/*調(diào)整zoom值,并測(cè)試目前寬度打印時(shí)橫向所占的面數(shù)*/
ls_zoom=string(li_use)
dw_print.modify("datawindow.zoom="+ls_zoom)
ls_H_Page=dw_print.describe(
evaluate('PageCountAcrossi)',"+string(dw_print.object.datawindow.firstrowonpage)+")")
iflnteger(ls_H_Page)=1then/*一頁足以打印出來*/
li_OK=li_use/*記錄這個(gè)可用的縮小比例*/
li_min=li_use+1
else
li_max=li_use-1
endif
choosecaselimax-limin
caseIS<0
exit
case0
li_use=li_min
case1
li_use=li_min
caseelse
li_use=lnt((li_max+li_min)/2)/*不不小于等于的I最小整數(shù)*/
endchoose
loop
/*還原窗口原大小*/
ifli_OK<>lOOthen
dw_print.modify("datawindow.zoom=100")
endif
dw_print.object.datawindo^.print.preview=false
dw_print.SetRedraw(TRUE)/*恢復(fù)重繪控件*/
returnli_OK
使用框架跨域運(yùn)行不丟失session的措施
首先闡叨原理:
系統(tǒng)是認(rèn)一種一種程序范圍H勺,一般來說,一種IE默認(rèn)為一種程序范圍.
框架由于有了跨域的內(nèi)容,因此它首先默認(rèn)的是框架程序自身的程序范圍,這樣使得框架
內(nèi)的程序范圍得不到確認(rèn).
為了讓這個(gè)IE默認(rèn)為框架內(nèi)日勺程序范圍,因此我使用了多次跳轉(zhuǎn).
首先,跳出本框架,進(jìn)入?種無框架的需要session值的網(wǎng)站頁面(就叫它B服務(wù)器的頁面),
并在這個(gè)頁面中生成一種session以便系統(tǒng)自動(dòng)生成一種session。然后乂跳|可到有框架H勺頁
面.由于系統(tǒng)已經(jīng)為這個(gè)IE生成了一種session。因此只要不關(guān)掉這個(gè)IE,系統(tǒng)一直認(rèn)為這個(gè)IE
是本程序范圍H勺.這樣,再次生成的session值就得以在這個(gè)ID中生存下來.
也就到達(dá)了騙過系統(tǒng)的目的.
再補(bǔ)充?點(diǎn),二次跳轉(zhuǎn)使用了不一樣的方式,原因是我需要把框架外的信息丟棄,而要保
留框架內(nèi)的信息.
而不-?樣H勺跳轉(zhuǎn)方式會(huì)丟棄或保留跳轉(zhuǎn)前的信息日勺。
程序?qū)崿F(xiàn)方式:
文獻(xiàn)1:
框架文獻(xiàn):index.htm(運(yùn)行在服務(wù)器A±)
<html>
<head>
<metaHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312">
奇豪l'】業(yè)</title>
</head>
<framesetrows="l,*"border=0frameborder="0">
<framename="winBackLoad"scrolling="no"noresizetarget="mainwebl"
src="default_top.htm">
<framename="mainwebl"src=""scrolling="auto">
<noframes>
<body>
<p>此網(wǎng)頁使用了框架,但您的J瀏覽器不支持框架。</p>
</body>
</noframes>
</frameset>
</html>
文獻(xiàn)2:index.asp(運(yùn)行在服務(wù)器B上,作用跳轉(zhuǎn)和生成sessionlD)
<script>
if(top.location!==self.location){
top.location=self.location;
)
〃這個(gè)JSH勺目口勺是跳出框架運(yùn)行
</script>
<%
ifsession("xm2")=,H,then
session("xm2")="eee”
'上面這一句日勺目H勺只是為了使用session,讓系統(tǒng)為這個(gè)IE生成一種sessionlD,并且判斷
一下是不是已經(jīng)跳轉(zhuǎn)過,省得引起死循環(huán)。
%>
<METAHTTP-EQUIV=REFRESHCONTENT="0;URL=',">
<%
,上面這一句是回到框架,注意:只能用上面這個(gè)跳轉(zhuǎn)口勺措施,別用下面的跳轉(zhuǎn)措施。
else
Response.Redirect"index2.asp"
'上面一句才是真正地跳轉(zhuǎn)運(yùn)行服務(wù)器B上的程序!注意:也只能用這措施跳!
endif%>
通過以上日勺跳轉(zhuǎn),本IE已經(jīng)有了服務(wù)器B上日勺session。也就是說,框架雖然是在服務(wù)
器A上的主框架運(yùn)行,但士可以保證服務(wù)器B上的session不丟失,到達(dá)跨域運(yùn)行的目的。
使用MD5變換算法防窮舉(沖撞)破譯密碼
MD5是在Web應(yīng)用程序中最常用時(shí)密碼加密算法。由于MD5是不可逆的,因而通過MD5
計(jì)算得到后的I密文,不能通過逆向算法得到原文。
回憶在Web應(yīng)用程序中使用MD5加密文本密碼的初衷,就是為了防止數(shù)據(jù)庫中保留口勺
密碼不幸泄露后被直接獲得。但襲擊者不僅擁有數(shù)據(jù)量巨大口勺密碼字典,并且建立了諸多
MD5原文/密文對(duì)照數(shù)據(jù)庫,能迅速地找到常用密碼的MD5密文,是破譯MD5密文的高效
途徑。然而,MD5密文數(shù)據(jù)庫所使用臥J是最常規(guī)於JMD5加密算法:原文->MD5-->密文。因
此,我們可以使用變換H勺MD5算法,使現(xiàn)成的MD5密文數(shù)據(jù)庫無所作為。
下面演示某些變換算法的例子((((((((當(dāng)然,在其他日勺Web開發(fā)語言中,也大同小異,完
全能得到相似口勺成果。
變換一:循環(huán)MD5
最輕易理解的變換就是對(duì)一種密碼進(jìn)行多次H勺MD5運(yùn)算。自定義一種函數(shù),它接受
$data和$1由05兩個(gè)形參,第一種是要加密的密碼,第二個(gè)是反復(fù)加密的次數(shù)。實(shí)現(xiàn)這種變換
有兩種算法
<?php
〃迭代算法
functionmd5_l_l($data,$times=32)
(
〃循環(huán)使用MD5
for($i=0;$i<$times;$i++){
$data=md5($data);
)
return$data;
〃遞歸算法
functionmd5_l_2($data,$times=32)
if($times>0){
$data=md5($data);
$times-;
returnmd5_l_2($data,$times);〃實(shí)現(xiàn)遞歸
}else{
return$data;
)
)
?>
變換二:密文分割MD5
盡管顧客口勺密碼是不確定日勺字符串,不過只要通過一次MD5運(yùn)算后,就會(huì)得到一種由
32個(gè)字符構(gòu)成H勺字符串,這時(shí)可以再針對(duì)這個(gè)定長字符串變換。有點(diǎn)BT的算法是,把這段
密文分割成若干段,對(duì)每段都進(jìn)行一次MD5運(yùn)算,然后把這堆密文連成一種超長的字符串,
最終再進(jìn)行一次MD5運(yùn)算,得到仍然是長度為32位的密文。
<?php
〃把密文分割成兩段,每段16個(gè)字符
functionmd5_2_l($data)
(
〃先把密碼加密成長度為32字符的密文
$data=md5($data);
〃把密碼分割成兩段
$left=substr($data,0,16);
$right=substr($data,16,16);
〃分別加密后再合并
$data=md5($left).md5($right);
〃最終把長字串再加密一次,成為32字符密文
returnmd5($data);
)
〃把密文分割成32段,每段1個(gè)字符
functionmd5_2_2($data)
(
$data=md5($data);
〃循環(huán)地截取密文中H勺每個(gè)字符并進(jìn)行加密、連接
for($i=0;$i<32;$i++){
$data.=md5($data{$i});
)
〃這時(shí)$data長度為1024個(gè)字符,再進(jìn)行一次MD5運(yùn)算
returnmd5($data);
)
當(dāng)然,這種密文分割的詳細(xì)算法是數(shù)之不盡的,例如可以把
原密文分割成16段每段兩字符、8段每段4字符,或者每一
段的字符數(shù)不相等……
變換三:附加字符串干涉
在加密過程的一種環(huán)節(jié)中,附加一種內(nèi)容確定的字符串
(例如說顧客名),干涉被加密的數(shù)據(jù)。不可以用隨機(jī)字串,
由于這樣會(huì)使原算法無法重現(xiàn)。這種算法在某些狀況下是很
具有優(yōu)勢(shì)的,例如說用于大量的顧客密碼加密,可以把顧客
名作為附加干涉字串,這樣襲擊者就算懂得你的算法,也很
難從他們手中的字典中一下子生成海量的對(duì)照表,然后大量
地破譯顧客密碼,只能有針對(duì)性的窮舉為數(shù)不多的顧客。
<?php
〃附加字符串在原數(shù)據(jù)的尾部
functionmd5_3_l($data,$append)
(
returnmd5($data.$append);
)
〃附加字符串在原數(shù)據(jù)的頭部
functionmd5_3_2($data,Sappend)
returnmd5($append.$data);
)
//附加字符串在原數(shù)據(jù)的頭尾
functionmd5_3_3($data,$append)
(
returnmd5($append.$data.$append);
)
?>
變換四:大小寫變換干涉
由于PHP所提供的md5()函數(shù)返回時(shí)密文中的英文字
母所有都是小寫的,因此我們可以把它們所有轉(zhuǎn)為大寫,然
后再進(jìn)行一次MD5運(yùn)算。
<?php
functionmd5_4($data)
(
〃先得到密碼的密文
$data=md5($data);
〃再把密文中的英文母所有轉(zhuǎn)為大寫
$data=strtotime($data);
〃最終再進(jìn)行一次MD5運(yùn)算并返回
returnmd5($data);
)
?>
變換五:字符串次序干涉
把MD5運(yùn)算后的密文字符串的次序調(diào)轉(zhuǎn)后,再進(jìn)行一
次MD5運(yùn)算。
<?php
functionmd5_5($data)
{
〃得到數(shù)據(jù)的密文
$data=md5($data);
〃再把密文字符串的I字符次序調(diào)轉(zhuǎn)
$data=strrev($data);
〃最終再進(jìn)行一次MD5運(yùn)算并返回
returnmd5($data);
)
?>
變換六、變換七、變換八……
MD5變換算法是數(shù)之不盡的,甚至不必自己再去發(fā)明,
就用上面的五個(gè)互相組合就可以搞出很BT的算法。例如說
先循環(huán)加密后再分割,并在每一段上附加一種字符串再分別
加密,然后變換大小寫并顛倒字符串次序后連成一種長字符
串再進(jìn)行MD5運(yùn)算……
假如真的很不幸,由于某些漏洞,例如說SQLInjection
或者文獻(xiàn)系統(tǒng)中的數(shù)據(jù)庫被下載而異致顧客密碼數(shù)據(jù)暴露,
那么MD5變換算法就能大大地增長破譯出密碼原文的難度,
首先就是使網(wǎng)上諸多的MD5原文/密文對(duì)照數(shù)據(jù)庫(要懂得,
這是破譯MD5最高效的措施)沒有用了,然后就是使襲擊
者用常規(guī)算法去窮舉一串由變換算法得到的密文而搞得焦
頭爛額。當(dāng)然,MD5變換算法尤其合用于非開源的Web程序
使用,雖說用在開源的程序中優(yōu)勢(shì)會(huì)被減弱(大家都懂得算
法),不過也能克制MD5原文/密文對(duì)照數(shù)據(jù)庫的作用。要
進(jìn)行這些復(fù)雜的變換運(yùn)算,當(dāng)然就要花費(fèi)的更多的系統(tǒng)開銷
了,然而對(duì)于安全性規(guī)定很嚴(yán)格的系統(tǒng)來說,多付出某些來
換取高一點(diǎn)的安全性,是完全值得的。
使用Java范型需要注意的地方
1.靜態(tài)措施要想范化,需要指定其類型參數(shù)
2、非范化類型中II勺實(shí)例措施要想范化,也需要制定其類型參數(shù)。
3.范化類型中"勺實(shí)力措施可以直接使用其類型自身II勺類型參數(shù)。
4.范型不是協(xié)變U勺,即List<Integer〉不是List<Number>lft子類。
5、不能實(shí)例化范型類型的數(shù)組,即newList<String>[3]是不合法的,提醒除非類型參數(shù)是一
種未綁定的通配符,即newListv?>[3]是合法W、J。
6.構(gòu)造延遲,在代碼編寫時(shí)我們不能通過類型參數(shù)來構(gòu)造一種該類型的實(shí)例,原因是我們不
懂得怎樣構(gòu)造,類型參數(shù)的實(shí)際類型是在運(yùn)行時(shí)確定的。
7、對(duì)于注意5所描述的問題我們有一種處理措施是List<String>list=(List<String>[])new
Objects;不過假如是運(yùn)行時(shí)建立數(shù)組呢,類型信息是運(yùn)行時(shí)確定口勺,那就換種寫法T[]
tarray=(T口)newObject[3];
8、上面的數(shù)組構(gòu)造是不被推薦的,最佳H勺措施是將類型信息傳遞到措施中,如method
(Class<V>type){V[]array=(V[])Array.newlnstance(type,length);},可以參照ArrayList
類的JtoArray(T[]a)措施日勺實(shí)現(xiàn)。
9、構(gòu)造通配符引用,假如set是一種Setv?>類型,則
Set<?>set2=newHashSet<?>(set);是不合法的L改
成Set<?>set2=newHashSet<Object>(set);就合法了。
使用C#編寫查詢IP段功能的程序
本文將通過一種實(shí)例來向大家講解怎樣使用c#來編寫一種具有查詢IP段功能的小程序。
重要功能:查詢一種IP所有的IP段.
關(guān)鍵:從Byte數(shù)組到ulong時(shí)轉(zhuǎn)換出來日勺數(shù)字和IPAddress.Address返回值的是不一樣樣
H勺.
如下是引用片段:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Net;
namespaceIPUtility
(
classProgram
(
staticvoidMain(stringJargs)
(
IPRangeManageirm=newIPRangeManage();
,,
irm.Add(newIPRange("^^J$","55"));
irm.Add(newIPRange("石家莊",”",“55”));
irm.Add(newIPRangefWllj","","55"));
irm.Add(newIPRange(“保定","”,”55"));
Console.WriteLine(irmSearch("").Name);
Console.ReadLine();
}
)
publicclassIPRange
(
privatestringName=string.Empty;
privateulong_BeginlP=0;
privateulong_EndlP=lnt32.MaxValue;
/**////
〃/IP段名稱
///
publicstringName
(
get{return_Name;}
set{_Name=value;}
}
/**////
III?始IP
III
publiculongBeginIP
(
get{return_BeginlP;}
set{_BeginlP=value;}
)
/**////
III?束IP
///
publiculongEndIP
(
get{return_EndlP;}
set{_EndlP=value;}
)
/**////
〃/此中段的范?
III
publiculongRange
(
get
(
returnEndIP-BeginIP;
}
)
publicIPRangefstringname,stringipBegin,stringipEnd)
(
this.Name=name;
this.BeginIP=IP2A(ipBegin);
this.EndlP=IP2A(ipEnd);
)
publicstaticulongIP2A(stringip)
byte[]bytes=IPAddress.Parse(ip).GetAddressBytes();
ulongret=0;
foreach(bytebinbytes)
(
ret?=8;
ret|=b;
)
returnret;
)
publicstaticintCompare(IPRangex,IPRangey)
(
if(x.Range==y.Range)
return0;
elseif(x.Range>y.Range)
return1;
elsereturn-1;
)
}
publicclassIPRangeManage
(
publicIPRangeManage()
()
privateList<IPRange>_IPRangeList=newList<IPRange>();
privatebool_NeedSort=true;
publicvoidAdd(IPRangeipRange)
(
JPRangeList.Add(ipRange);
_NeedSort=true;
)
privatevoidSort()
(
if(_NeedSort)
(
_IPRangeList.Sort(newComparison(IPRange.Compare));
)
)
publicIPRangeSearch(stringipString)
(
ulongip=IPRange.IP2A(ipString);
this.Sort();
foreach(IPRangeirinJPRangeList)
(
if(ir.BeginIP<=ip&&ir.EndIP>=ip)
(
returnir;
)
)
returnnull;
)
}
)
設(shè)計(jì)模式不是什么很高深藥東西,有了這些知識(shí)大膽地學(xué)習(xí)吧。諸多人說,看了諸多設(shè)計(jì)模
式的文章,為何就是看不懂呢?我覺得原因也許有兩個(gè),第一就是你沒有花時(shí)間認(rèn)真看,
笫二就是看的文章不適合作為切入點(diǎn)。不管學(xué)習(xí)什么,切入點(diǎn)非常重要,假如切入點(diǎn)不是那
么平易近人的話很也許會(huì)把你拒之門外,對(duì)于初學(xué)者來說從實(shí)例切入最合適。最佳是能碰到
自己做過的項(xiàng)目的實(shí)例作為切入點(diǎn),這樣你一比較就懂得為何設(shè)計(jì)模式好了。
假如要把設(shè)計(jì)模式口勺學(xué)習(xí)境界分一下級(jí)的話,我這樣分:
??第一重????能看懂設(shè)計(jì)模式的文章
??第二重????能自己寫一種設(shè)計(jì)模式H勺骨架
??笫三重????能自己編一種新的運(yùn)用設(shè)計(jì)模式的例子
??第四重:能在寫代碼的時(shí)候想到似乎有設(shè)計(jì)模式適合??在翻閱資料后找到了這種
設(shè)計(jì)模式
??第五重????在理解項(xiàng)目的需求后就能意識(shí)到哪里可以使用哪種設(shè)計(jì)模式進(jìn)行優(yōu)化
??第六重:完全掌握了設(shè)計(jì)模式日勺精髓??靈活使用多種設(shè)計(jì)模式以及其變種
不管怎么樣,多看多做多替代才是學(xué)習(xí)日勺措施,他人舉例十個(gè)都不及自己做一種例子,被動(dòng)
十個(gè)原則都不及自己體會(huì)出一種原則。每一種設(shè)計(jì)模式雖然均有一種骨架,不過也不必過于
強(qiáng)調(diào)這個(gè)形式,諸多時(shí)候根據(jù)自己的需求簡(jiǎn)化?點(diǎn),變化?點(diǎn),或者混雜某些其他的設(shè)計(jì)模
式,只要能實(shí)現(xiàn)目的I了,也是一種不錯(cuò)的選擇。
諸多人會(huì)覺得這樣多種設(shè)計(jì)模式?jīng)]有幾種能用得上。我覺得這不是什么問題,用不上那就用
不上,這些設(shè)計(jì)模式是大師經(jīng)歷無數(shù)大型項(xiàng)目后的精摘,假如能在自己做的一種小項(xiàng)目中用
上兩三個(gè)就很不錯(cuò)了,用上二三十個(gè)的項(xiàng)目絕對(duì)是怪胎。用不上千萬別強(qiáng)求,否則既不利于
項(xiàng)目的可維護(hù)性又增長了工作量。
尚有諸多人會(huì)覺得這些設(shè)計(jì)模式諸多都是相似的。并且每個(gè)人H勺感覺還不?樣樣,有人覺得
A和B很相似,有人卻覺得A和B很好辨別,不過B和C卻很相似啊。感覺很好辨別,闡明
你看準(zhǔn)設(shè)計(jì)模式日勺著重點(diǎn)的,感覺同樣闡明你看到日勺還是它的形。雙胞胎雖然形同樣,不過
神肯定不一樣樣H勺,只要認(rèn)準(zhǔn)設(shè)計(jì)模式處理H勺問題,就不會(huì)看錯(cuò)。
有關(guān)本系列文章
本來這些內(nèi)容都是用來進(jìn)行企業(yè)內(nèi)部每周知識(shí)分享活動(dòng)叢J,既然有某些內(nèi)容了,想想不妨就
整頓一下貼出來吧。也正由于這個(gè)原因,文章中的某些例子都基于團(tuán)體內(nèi)部組員所能理解11勺
某些項(xiàng)目,也許這些項(xiàng)目對(duì)大家來說比較陌生,不過好處是例子相對(duì)比較貼近實(shí)際一點(diǎn)。本
系列一共有20篇左右,除了簡(jiǎn)介23種GOF設(shè)計(jì)模式中常用的一部分之外(某些設(shè)計(jì)模式的
思想在C#語言中有了更簡(jiǎn)樸的實(shí)現(xiàn),某些設(shè)計(jì)模式不是很常用)還也許會(huì)簡(jiǎn)介某些其他有用
的設(shè)計(jì)模式。在這些文章中,我不會(huì)過多去說某些理論上的東西,也不會(huì)有構(gòu)造圖(這些內(nèi)
容網(wǎng)上到處都是),所有的內(nèi)容都是圍繞相對(duì)實(shí)際例子展開。我想,只有這樣才能更快H勺吸
取設(shè)計(jì)模式日勺神而不是其形。在看文章的時(shí)候提議你結(jié)合《設(shè)計(jì)模式》一書以及博客園日勺其
他設(shè)計(jì)模式有關(guān)文章一起看,這樣才能對(duì)設(shè)計(jì)模式理解的全面和充足一點(diǎn)。
每一篇文章都會(huì)有如卜部分:
??意圖:抄設(shè)計(jì)模式一書啊??由于意圖實(shí)在是太重
要??因此不得不首先列出。??
??場(chǎng)景????以一種實(shí)際的場(chǎng)景來闡明為何要引入設(shè)
計(jì)模式。
使用C#編寫DES加密程序的framework
這個(gè)例子中演示了怎樣使用C#中的加密包進(jìn)行DES算法加密,由于NGWNET中帶的協(xié)助實(shí)
在是簡(jiǎn)樸,和沒有同樣,呵呵,不過大家可以借助這個(gè)例子一窺DES加密的使用方法。
des_demo.cs代碼如下:
usingSystem;
usingSystem.Security.Cryptography;
usingSystem.10;
usingSystem.Text;
publicclassEncryptStringDES{
publicstaticvoidMain(String[]args){
if(args.Length<1){
Console.WriteLinef'Usage:des_demo<string-to-encrypt>"/args[0]);
return;
)
〃使用UTF8函數(shù)加密輸入?yún)?shù)
UTF8Encodingutf8Encoding=newUTF8Encoding();
byte[]inputByteArray=utf8Encoding.GetBytes(args[0].ToCharArray());
//方式■:調(diào)用默認(rèn)的DES實(shí)現(xiàn)措施DES_CSP.
DESdes=DES.Create();
//方式二:直接使用DES_CSP()實(shí)現(xiàn)DES的實(shí)體
//DES_CSPDES=newDES_CSP();
//初始化DES加密的密鑰和一種隨機(jī)的、8比特的初始化向量(IV)
Byte[]key={0x01,0x23,0x45,0x67,0x89,Oxab,Oxcd,Oxef};
Byte[]IV={0x12,0x34,0x56,0x78,0x90zOxab,OxcdzOxef};
des.Key=key;
des.IV=IV;
//建立加密流
SymmetricStreamEncryptorsse=des.CreateEncryptor(|;
〃使用CryptoMemoryStream措施獲取加密過程日勺輸出
CryptoMemoryStreamcms=newCryptoMemoryStream();
//將SymmetricStreamEncryptor?流中Mj加密數(shù)據(jù)輸出到CryptoMemoryStream中
sse.SetSink(cms);
//加密完畢,將成果輸出到控制臺(tái)
sse.Write(inputByteArray);
sse.CloseStream();
//獲取加密數(shù)據(jù)
byte[]encryptedData=cms.Data;
//輸出加密后成果
Console.WriteLine("加密成果:");
for(inti=0;i<encryptedData.Length;i++){
Console.Write("{0:X2}\encryptedData[i]);
)
Console.WriteLine();
〃上面演示了怎樣進(jìn)行加密,下面演示怎樣進(jìn)行解密
SymmetricStreamDecryptorssd=des.CreateDecryptori);
cms=newCryptoMemoryStream();
ssd.SetSink(cms);
ssd.Write(encryptedDcta);
ssd.CloseStream();
byte[]decryptedData=cms.Data;
char[]decryptedCharArray=utf8Encoding.GetChars(decryptedData);
Console.WriteLine("解密后數(shù)據(jù):");
Console.Write(decryptedCharArray);
Console.WriteLine();
)
}
編譯:
D:\csharp>cscdes_demo.cs
Microsoft(R)C#CompilerVersion7.00.8905(NGWSruntime.14.1812.10]
Copyright(C)MicrosoftCorp.Allrightsreserved.
運(yùn)行實(shí)例:
D:\csharpxJes_demo.exe使用C#編寫DES加密程序J、Jframework
加密成果:
3D2264C657DIC4C3CF77CE2FDOEl782A4DED7AA883F9OE14ElBA38
7B06418DB5E93F000DC328DIF96D174B6EA7416840
解密后數(shù)據(jù):
使用C#編寫DES加密程序的framework
使用ASP重啟服務(wù)器
大家懂得直接使用ASP是不可以重啟服務(wù)器H勺,這時(shí)我們需要制作?種組件來實(shí)現(xiàn)功能,
ASP通過這個(gè)組件調(diào)用系統(tǒng)API,然后按照不一樣H勺重啟和關(guān)機(jī)方式進(jìn)行操作!
下面先說COMH勺制作,在VB中新建一工程,當(dāng)然是AceiveXdll的!
1)先修改工程屬性,生工程屬性窗口將工程名稱改為system,在類模塊窗口將模塊名
稱改為contral,保留工程;
2)然后添加一種模塊,用米申明需要使用的API和常數(shù)!下面是模塊中的內(nèi)容!
DeclareFunctionExitWindowsExLib"user32"(ByVaiuFlagsAsLong,ByVaidwReservedAs
Long)AsLong
3)在類模塊中輸入下列代碼:
PublicFunctionreboot(atypeAsVariant)
t&=ExitWindowsEx(l,atype)
EndFunction
該函數(shù)需要傳入一種參數(shù),用來控制啟動(dòng)方式,這個(gè)參數(shù)是從ASP程序中傳入於J,等一下
就可以看到詳細(xì)U勺使用措施!
編寫完上面的代碼,保留工程,將工程編譯為system.dll。下面就寫ASP程序!
ASP中的代碼非常簡(jiǎn)樸:
<%
atype=request("atype")
setsys=server.CreateObject("system.contral")
sys.reboot(atype)
%>
其中atype可以使用0、1、2、4,0、1和4均為關(guān)機(jī),2用來重啟。寫完后執(zhí)行ASP就
可以了!
JAVA6.0之后,其中JDK自帶有個(gè)輕量級(jí)/、Jwebservice服務(wù)器。假如你比較細(xì)心一定發(fā)
目前你安裝javaII勺途徑下,有javawebserviceI向示例代碼。
java開發(fā)過webservice,不過當(dāng)時(shí)用了一種叩acheFaxis開源項(xiàng)目。假如axis夜進(jìn)化
了,不過java自帶有何須舍近求遠(yuǎn)呢。最簡(jiǎn)樸javawebservice范例過程記錄下來,
netbeans6,首先建立一種java應(yīng)用程序工程,名為
WebServiceso建立一種服務(wù)端程序。
packageWebServices;
importjavax.jws.*;
importjavax.xmLws.Endpoint
/**
*@authorhecm
V
@WebService(targetNamespace="",
serviceName="HelloService")
publicclassWSProvider
(
//@WebResult(name="Greetings'1)//自定義該措
施返回值在WSDL中有關(guān)的描述
@WebMethod(action=nsayHin,operationName="
sayHin)
publicStringsayHi(@WebParam(name="MyName
")Stringname)
return“HiJ+name;//@WebParam是自定義參數(shù)
name在WSDL中有關(guān)的描述
@Oneway//表明該服務(wù)措施是單向陶既沒有返回值,
也不應(yīng)當(dāng)申明檢查異常
@WebMethod(action="printSystemTime\
operationName="printSystemTime")
〃自定義該措施在WSDL中有關(guān)的描述
publicvoidprintTime()
(
System.out.println(System.currentTimeMillis());
)
publicstaticvoidmain(String[]args)
(
ThreadwsPublisher=newThread(new
WSPublisherQ);
wsPublisher.start。;
)
privatestaticclassWSPublisherimplements
Runnable
(
publicvoidrun()
(
//公布WSProvider到http://
tocalhost8888/hechangmin/WSProvider這個(gè)地址>之前
必須調(diào)用wsgen命令
//生成服務(wù)類WSProvider的支持類,命令如下:
//wsgen-cp.WebServices.WSProvider
Endpoint.publish(Mhttp://tocalhost8888/JAVA-HE/WSPr
ovidern,newWSProviderQ);
)
)
實(shí)戰(zhàn)JDK6.0自帶webservice
當(dāng)然建立對(duì)應(yīng)的包,就不用說了。
然后編譯文獻(xiàn)。
進(jìn)入命令提醒符下,進(jìn)入classes目錄,運(yùn)行:wsgen
-cp.WebServices.WSProvider
可以看到將剛剛的class生成了幾種java文獻(xiàn)和class
文獻(xiàn)。
目前要做的是公布ws到
ht^p://k)calhost8888/chinajash/WSProvider
而實(shí)際上的動(dòng)作就是:
Endpoint.publish("http://tocalhost8888/chinajash/WSP
roviderr\newWSProviderQ);
當(dāng)然直接運(yùn)行WSProvider。
然后輸入
http://k)calhost8888/JAVA-HE/WSProvider?wsdl
就已經(jīng)查看到生成的Iwsdl(webservice描述語言)。
也就是服務(wù)端就0K了。
保持運(yùn)行。編寫一種測(cè)試客戶端:
首先選擇項(xiàng)目,右鍵新建web服務(wù)客戶端。其中wsurl
填入剛剛生成的wsdl地址:
http://tocalhost8888/JAVA-HE/WSProvider?wsdl
(實(shí)際上:和wsimport
http://localhost8888/JAVA-HE/WSProvider?wsdl同樣的
效果)
產(chǎn)生一種效果:在classes下按照之前指定的名字空
間產(chǎn)生的包下(目錄構(gòu)造)生成了7個(gè)協(xié)助classo
然后我們建立一種包c(diǎn)lient建立測(cè)試文獻(xiàn):
/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageclient
importnet.btogjava.java_he.*;
/**
*
*@authorhecm
*/
publicclassTest{
publicstaticvoidmain(Stringargs[])
(
HelloServicehs=newHelloServiceQ;
WSProviderws=hs.getWSProviderPortQ;
System.out.println(ws.sayHi("hechangmin"));
ws.printSystemTime();
)
運(yùn)行這個(gè)測(cè)試類:
Hthechangmin
輸出了。順利完畢!
提醒:一公布的地址最佳寫成可配置。尚有就是wsdl中
會(huì)嚴(yán)格按照你指定的url來訪問,例如你指定的
那么你用本機(jī)IP的時(shí)候也許并不能順利訪問。
實(shí)現(xiàn)基于IDEA算法的加密工具
/*-文獻(xiàn)名:idea.c*/
/*-*/
/*-功能:運(yùn)用idea加密算法實(shí)現(xiàn)文獻(xiàn)H勺加密*/
/*-*/
/*-闡明:*/
/*-這是運(yùn)用IDEA算法實(shí)現(xiàn)R勺文獻(xiàn)加密工具可以在怯律容許范圍內(nèi)以非商*/
/*-業(yè)形式自由使用,該程序的J所有權(quán)利由作者吳真保留*/
/*-7
/*-版本號(hào):1.0.0(.6)*/
/*-7
#include
#include
#include
#include
#include
#include"idea.h"
typedefintINT32;
typedefcharINT8;
typedefunsignedcharUL0NG8;
typedefunsignedshortUL0NG16;
typedefunsignedlongULONG32;
#defineSUCCESS0
^defineFAIL-1
#defineWZ_COMMEND_NUM4
^defineWZUSEHELPNUM7
#defineREADFILESIZE512/*一次從文獻(xiàn)中讀取多少字節(jié),可以根據(jù)內(nèi)存的大小調(diào)整*/
INT32file_enc(FILE*readfile,FILE*writefile/ULONG8*key);/*加密文獻(xiàn)*/
INT32file_dec(FILE*readfilefFILE?writefile,UL0NG8*key);/*解密文獻(xiàn)*/
INT32hextofile(ULON38*buf,FILE?writefile,ULONG32length);/*以16進(jìn)制寫入文獻(xiàn)*/
INT32encodehex(ULONG8*tobufzULONG8*frombuf,ULONG32len);/*16進(jìn)制解碼*/
voidwz_printhelp();/*打印協(xié)助*/
INT8*WZ_Commend_Help[]=
(
”基于IDEAH勺加密解密工具vl.O"f/*0*/
”追求卓越,勇于創(chuàng)新",
”一著者:吳真一,
IIII
);
INT8*WZ_USE_HELP[]={
"輸入5個(gè)參數(shù):",
"\tl.可執(zhí)行文獻(xiàn)名*.exe",
"\t2.操作類型1:加密;2:解密工
”\t3.讀出數(shù)據(jù)的文獻(xiàn)名*.txt”,
“\t4.寫入數(shù)據(jù)H勺文獻(xiàn)名*.txt”,
”\t5.密鑰(32字節(jié)蜜
II******************************II
);
voidmain(INT32argcJNT8*argv[])
(
INT8*FILENAME1,*FILENAME2;
FILE*fp,*fp2;
ULONG8key[33]={0};/*密鑰容器*/
if(argc!=5)
(
wz_printhelp();
return;
)
FILENAMEl=argv[2];
FILENAME2=argv[3];
,
if((fp=fopen(FILENAIVEl;r+b"))==NULL||(fp2=fopen(FILENAME2/"w+b"))==NULL)
(
printf("Can'topenfile\n");
return;
)
memcpy(key,argv(4],strlen(argv[4]));/*獲得密鑰*/
switch(atoi(argv[l]))
case1:/*加密操作*/
file_enc(fp,fp2,key);
printf("\n\tlDEA加密完畢,密文存于%s文獻(xiàn)\n,F(xiàn)ILENAME2);
break;
case2:
/*解密*/
file_dec(fpzfp2zkey);
printf("\n\tIDEA解密完畢,明文存于%s文獻(xiàn)\n",FILENAME2);
break;
default:
printf("請(qǐng)選擇是力口密|解密plesechooseencrypt|deencrypt\n");
break;
)
fclose(fp);
fclose(fp2);
)
INT32hextofile(ULON38*buf,FILE?writefile,ULONG32length)
(
ULONG32writelen=0;
/*以16進(jìn)制形式寫入文獻(xiàn)*/
while(writelen<length)
if(buf[writelen]==0)
fprintf(writefile,"%x",0);
fprintf(writefile,"%x",0);
}
elseif(buffwritelen]<0x10)
(
fprintf(writefile,"%x",0);
fprintf(writefile,"%x",buf[writelen]);
)
else
(
fprintf(writefile,"%x",buf[writelen]);
)
writelen++;
)
returnSUCCESS;
)
INT32file_enc(FILE*readfile,FILE*writefile,ULONG84key)
(
INT32filelen=0,readlen=O,writelen=0;
ULONG32totalfilelen=0;/*記錄實(shí)際歐J文獻(xiàn)的長度
INT32i;
ULONG8readbuf[READFILESIZE]={0};
idea_makekey((ULONG32*)key,outkey);
filelen=fread(readbu;sizeof(INT8),READFILESIZE,readfile);
while(filelen==READFILESIZE)
totalfilelen+=READFILESIZE;
for(i=0;i<READFILESIZE;i+=8)
(
idea_enc((ULONG16*:i&readbuf[i]);/*力口密*/
)
hextofile(readbuf,writefile,READFILESIZE);/*以16進(jìn)制形式寫入文獻(xiàn)*/
memset(readbuf,OzREADFILESIZE);
filelen=fread(readbu;sizeoffINT8),READFILESIZE,readfile);
)
/*這是從文獻(xiàn)中讀出的最終一批數(shù)據(jù),長度也許會(huì)等于0,因此要先判斷*/
if(filelen>0)
(
/*假如從文獻(xiàn)中讀出的長度不等于0,那么肯定有8個(gè)字節(jié)以上日勺空間
文獻(xiàn)長度存在最終8個(gè)字節(jié)中*/
totalfilelen+=filelen;
memcpy(&readbuf[READFILESIZE-8],(ULONG8*)&totalfilelen,4);
for(i=0;i<READFILESIZE;i+=8)
(
idea_enc((ULONG16*j&readbuf[i]);/*加密*/
)
hextofile(readbuf,writefile,READFILESIZE);/*以16進(jìn)制形式寫入文獻(xiàn)*/
memset(readbuf,0,READFILESIZE);
)
else/*filelen==0*/
memcpy(&readbuf[0],(ULONG8*)&totalfilelen,4);
idea_enc((ULONG16*:i&readbuf[0]);/*力口密*/
hextofile(readbuf,writefile,8);/*以16進(jìn)制形式寫入文獻(xiàn)*/
)
returnSUCCESS;
)
INT32file_dec(FILE*readfile,FILE*writefile/ULONG8*key)
(
INT32filelen=0,readlen=0,writelen=0;
ULONG32totalfilelen=0;/*記錄實(shí)際吊J文獻(xiàn)W、J長度*/
INT32i,num;
ULONG8readbuf[READFILESIZE]={0};
ULONG8sendbuf[READFILESIZE*2]={0};
idea_makekey((ULONG32*)key,outkey);
key_decryExp(outkey);
fseek(readfile,-16,SEEK_END);/*最終16個(gè)字節(jié)的表達(dá)文獻(xiàn)長度的空間*/
filelen=fread(sendbuf,sizeof(INT8),16,readfile);
encodehex(readbuf,sendbuf,8);
idea_dec((ULONG16*)&readbuf[0]);/*解密*/
得到文獻(xiàn)總長*/
memcpy((ULONG8*)&totalfilelen/&readbuf[0],4);/*
memset(readbuf,0,8);
memsettsendbutO,16);
num=totalfilelen/READFILESIZE;/*有幾利?READFILESIZE組*/
totalfilelen%=READFILESIZE;
fseek(readfile,O,SEEK_SET);/*跳到文獻(xiàn)頭*/
while(num-)
(
filelen=fread(sendbuf,sizeof(INT8),READFILESIZE*2,readfile);
encodehex(readbuf,sendbuf,READFILESIZE);
for(i=0;i<READFILESIZE;i+=8)
(
idea_dec((ULONG16*:i&readbuf[i]);/*解密*/
)
writelen=fwrite(readbuf,sizeof(INT8),READFILESIZE,writefile);
memset(readbuf,0,READFILESIZE);
memset(sendbutO,READFILESIZE*2);
)
if(totalfilelen>0)/*最終?塊有多出口勺元素*/
(
filelen=fread(sendbuf,sizeoffINT8),READFILESIZE*2,readfile);
encodehex(readbuf,sendbuf,READFILESIZE);
for(i=0;i<READFILESIZE;i+=8)
(
idea_dec((ULONG16*j&readbuf[i]);/*解密*/
)
writelen=fwrite(readbuf,sizeof(INT8),totalfilelen,writefile);
memset(readbuf,0,READFILESIZE);
memset(sendbuf,0,READFIlESIZE*2);
)
returnSUCCESS;
)
INT32encodehex(ULONG8*tobuf,ULONG8*frombuf,ULONG32len)
(
UL0NG8*readfirst=frombuf;
ULONG8*readend=&frombuf[l];
INT8*s;
ULONG8y[2];
ULONG32i;
for(i=0;i<len;i++)
(
y[0]=*readfirst;
y(l]=*readend;
readfirst+=2;
readend+=2;
tobuf[i]=(ULONG8)strtol((INT8*)yz&s,16);
)
returnSUCCESS;
)
voidwz_printhelp()
(
INT32i;
printf("\t");
for(i=0;i<22;i++)
printf(”%c,5);
)
printf("\n");
for(i=0;i<WZ_COMMEND_NUM;i++)
(
printf("\t%c\t%s%c\n"/5zWZ_Commend_Help[i],5);
}
printf("\t");
for(i=0;i<22;i++)
(
printf("%c",5);
)
printf("\n");
for(i=0;i<WZUSEHELPNUM;i++)
(
printf("\t%s\n",WZ_USE_HELP[i]);
)
return;
)
實(shí)現(xiàn)和IE瀏覽器交互的幾種措施的簡(jiǎn)介
1.引言
怎樣實(shí)現(xiàn)對(duì)IE瀏覽器中對(duì)象曰勺操作是一種很有實(shí)際意義問題,通過和IE綁定的DLL我
們可以記錄IE瀏覽過的網(wǎng)頁的次序,分析顧客的使用行為和模式。我們可以對(duì)網(wǎng)頁的內(nèi)容進(jìn)
行過濾和翻譯,可以自動(dòng)填寫網(wǎng)頁中常常需要顧客填寫叼Form內(nèi)容等等,我們所有的例子代
碼都是通過VC來表達(dá)的,采用的原理是通過和IE對(duì)象的接口的交互來實(shí)現(xiàn)對(duì)IE的訪問.實(shí)
際上是采用COM日勺技術(shù),我們懂得COM是和語言無關(guān)的一種二進(jìn)制對(duì)象交互的)模式,因此
實(shí)際上我們下面所描述的內(nèi)容都可以用其他的語言來實(shí)現(xiàn),例如VB,DELPHI,C++Builder等
等。
2.IE實(shí)例遍歷實(shí)現(xiàn)
首先我們來看系統(tǒng)是怎樣懂得目前有多少個(gè)IE日勺實(shí)例在運(yùn)行。
我們懂得在Windows體系構(gòu)造下,一種應(yīng)用程序可以通過操作系統(tǒng)的運(yùn)行對(duì)象表來和
這些應(yīng)用H勺實(shí)例進(jìn)行交互,不過IE目前H勺實(shí)現(xiàn)機(jī)制是不在運(yùn)行對(duì)象表中進(jìn)行注冊(cè),因此需要
采用其他的措施。我們懂得可以通過Shellwindows集合來代表屬于shell的I目前打開的窗口
的集合,而IE就是屬于shell的一種應(yīng)用程序。
下面我們描述一下用VC實(shí)現(xiàn)對(duì)目前IE實(shí)例的進(jìn)行遍歷II勺措施。IShellWindows是有關(guān)
系統(tǒng)shell日勺一種接口,我們可以定義一種如下的接口變量:
SHDocVw::IShellWindowsP:rm_spSHWinds;
然后創(chuàng)立變量口勺實(shí)例:
m_spSHWinds.Createhstance
(_uuidof(SHDocVw::ShellWindows));
通過IShellWindows接口II勺措施GetCount
可以得到目前實(shí)例的數(shù)目:
longnCount=m_spSHWinds->GetCount();
通過IShellWindows接口H勺措施Item
可以得到每一種實(shí)例對(duì)象
IDispatchP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)態(tài)心電圖目前最需要解決的問題教學(xué)課件
- 【大學(xué)課件】國際新興服務(wù)貿(mào)易產(chǎn)業(yè)
- 【物理課件】運(yùn)動(dòng)快慢的描述 速度課件
- DB32T-長江河道疏浚采砂項(xiàng)目施工質(zhì)量驗(yàn)收規(guī)范編制說明
- 信息與通信射頻電路與天線課件
- 《電梯安全經(jīng)驗(yàn)分享》課件
- 現(xiàn)在完成時(shí)復(fù)習(xí)課件
- 單位人力資源管理制度集粹選集十篇
- 固收定期報(bào)告:資金面均衡偏松年末票據(jù)利率上行
- 單位管理制度品讀選集【人力資源管理】
- 服務(wù)推廣合同協(xié)議(2025年)
- 麻風(fēng)病防治知識(shí)課件
- 中國保險(xiǎn)行業(yè)協(xié)會(huì)官方-2023年度商業(yè)健康保險(xiǎn)經(jīng)營數(shù)據(jù)分析報(bào)告-2024年3月
- 痛風(fēng)護(hù)理疑難病例討論
- 文印服務(wù)投標(biāo)方案(技術(shù)方案)
- 木材材積表0.1-10米.xls
- 輕質(zhì)隔墻板安裝合同協(xié)議書范本標(biāo)準(zhǔn)版
- 車輛管理各崗位績(jī)效考核量表
- 挺身式跳遠(yuǎn)單元教學(xué)計(jì)劃
- (完整版)小學(xué)三年級(jí)下冊(cè)詞語表
- 淺談小組合作學(xué)習(xí)在小學(xué)數(shù)學(xué)課堂中的應(yīng)用
評(píng)論
0/150
提交評(píng)論