在asp中通过vbs类实现rsa加密与解密的代码
在asp中通过vbs类实现rsa加密与解密的代码
发布时间:2016-12-29 来源:查字典编辑
摘要:在asp中通过vbs类实现rsa加密与解密,建议入精华本文章有两文件组成test.asp测试演示文件clsrsa.asp实现rsa加密与解密...

在asp中通过vbs类实现rsa加密与解密,建议入精华

本文章有两文件组成

test.asp测试演示文件

clsrsa.asp实现rsa加密与解密的vbs类文件

下面是代码:

1.test.asp

复制代码 代码如下:

<%

rem文章标题:在asp中通过vbs类实现rsa加密与解密

rem收集整理:yanek

rem联系:aspboy@263.net

%>

<%OptionExplicit%>

<>

<%

DimLngKeyE

DimLngKeyD

DimLngKeyN

DimStrMessage

DimObjRSA

IfNotRequest.Form=""Then

LngKeyE=Request.Form("KeyE")

LngKeyD=Request.Form("KeyD")

LngKeyN=Request.Form("KeyN")

StrMessage=Request.Form("Message")

SetObjRSA=NewclsRSA

SelectCaseRequest.Form("Action")

Case"GenerateKeys"

CallObjRSA.GenKey()

LngKeyE=ObjRSA.PublicKey

LngKeyD=ObjRSA.PrivateKey

LngKeyN=ObjRSA.Modulus

Case"Encrypt"

ObjRSA.PublicKey=LngKeyE

ObjRSA.Modulus=LngKeyN

StrMessage=ObjRSA.Encode(StrMessage)

Case"Decrypt"

ObjRSA.PrivateKey=LngKeyD

ObjRSA.Modulus=LngKeyN

StrMessage=ObjRSA.Decode(StrMessage)

EndSelect

SetObjRSA=Nothing

EndIf

%>

<HTML>

<HEAD>

<TITLE>RSACipherDemonstration</TITLE>

</HEAD>

<BODY>

<H1>RSACipherDemonstration</H1>

<P>

Youwillfirstneedtogenerateyourpublic/privagekey-pair

beforeyoucanencrypt/decryptmessages.

</P>

<FORMmethod="post">

<TABLE>

<TR>

<TD>PublicKey</TD>

<TD><INPUTname="KeyE"value="<%=Server.HTMLEncode(LngKeyE)%>"></TD>

<TDrowspan="3">

<INPUTtype="Submit"name="Action"value="GenerateKeys">

</TD>

</TR>

<TR>

<TD>PrivateKey</TD>

<TD><INPUTname="KeyD"value="<%=Server.HTMLEncode(LngKeyD)%>"></TD>

</TR>

<TR>

<TD>Modulus</TD>

<TD><INPUTname="KeyN"value="<%=Server.HTMLEncode(LngKeyN)%>"></TD>

</TR>

<TR>

<TDcolspan="3">

TestMessage:<BR>

<TEXTAREAname="Message"cols="50"rows="7"><%=Server.HTMLEncode(StrMessage)%></TEXTAREA>

</TD>

</TR>

<TR>

<TDalign="right"colspan="3">

<INPUTtype="Submit"name="Action"value="Encrypt">

<INPUTtype="Submit"name="Action"value="Decrypt">

</TD>

</TR>

</TABLE>

</FORM>

</BODY>

</HTML>

clsrsa.asp

复制代码 代码如下:

<%

rem实现rsa加密与解密的vbs类文件

rem文章标题:在asp中通过vbs类实现rsa加密与解密

rem收集整理:yanek

rem联系:aspboy@263.net

'RSAEncryptionClass

'

'.PrivateKey

'Yourpersonalprivatekey.Keepthishidden.

'

'.PublicKey

'Keyforotherstoencryptdatawith.

'

'.Modulus

'Usedwithbothpublicandprivatekeyswhenencrypting

'anddecryptingdata.

'

'.GenKey()

'CreatesPublic/PrivatekeysetandModulus

'

'.Crypt(pLngMessage,pLngKey)

'Encrypts/Decryptsmessageandreturns

'asastring.

'

'.Encode(pStrMessage)

'Encryptsmessageandreturnsindouble-hexformat

'

'.Decode(pStrMessage)

'Decryptsmessagefromdouble-hexformatandreturnsastring

'

ClassclsRSA

PublicPrivateKey

PublicPublicKey

PublicModulus

PublicSubGenKey()

DimlLngPhi

Dimq

Dimp

Randomize

Do

Do

'2randomprimarynumbers(0to1000)

Do

p=Rnd*10001

LoopWhileNotIsPrime(p)

Do

q=Rnd*10001

LoopWhileNotIsPrime(q)

'n=productof2primes

Modulus=p*q1

'randomdecryptor(2ton)

PrivateKey=Rnd*(Modulus-2)1+2

lLngPhi=(p-1)*(q-1)1

PublicKey=Euler(lLngPhi,PrivateKey)

LoopWhilePublicKey=0OrPublicKey=1

'Loopifwecan'tcrypt/decryptabyte

LoopWhileNotTestCrypt(255)

EndSub

PrivateFunctionTestCrypt(ByRefpBytData)

DimlStrCrypted

lStrCrypted=Crypt(pBytData,PublicKey)

TestCrypt=Crypt(lStrCrypted,PrivateKey)=pBytData

EndFunction

PrivateFunctionEuler(ByRefpLngPHI,ByRefpLngKey)

DimlLngR(3)

DimlLngP(3)

DimlLngQ(3)

DimlLngCounter

DimlLngResult

Euler=0

lLngR(1)=pLngPHI:lLngR(0)=pLngKey

lLngP(1)=0:lLngP(0)=1

lLngQ(1)=2:lLngQ(0)=0

lLngCounter=-1

DoUntillLngR(0)=0

lLngR(2)=lLngR(1):lLngR(1)=lLngR(0)

lLngP(2)=lLngP(1):lLngP(1)=lLngP(0)

lLngQ(2)=lLngQ(1):lLngQ(1)=lLngQ(0)

lLngCounter=lLngCounter+1

lLngR(0)=lLngR(2)ModlLngR(1)

lLngP(0)=((lLngR(2)lLngR(1))*lLngP(1))+lLngP(2)

lLngQ(0)=((lLngR(2)lLngR(1))*lLngQ(1))+lLngQ(2)

Loop

lLngResult=(pLngKey*lLngP(1))-(pLngPHI*lLngQ(1))

IflLngResult>0Then

Euler=lLngP(1)

Else

Euler=Abs(lLngP(1))+pLngPHI

EndIf

EndFunction

PublicFunctionCrypt(pLngMessage,pLngKey)

OnErrorResumeNext

DimlLngMod

DimlLngResult

DimlLngIndex

IfpLngKeyMod2=0Then

lLngResult=1

ForlLngIndex=1TopLngKey/2

lLngMod=(pLngMessage^2)ModModulus

'Modmayerroronkeygeneration

lLngResult=(lLngMod*lLngResult)ModModulus

IfErrThenExitFunction

Next

Else

lLngResult=pLngMessage

ForlLngIndex=1TopLngKey/2

lLngMod=(pLngMessage^2)ModModulus

OnErrorResumeNext

'Modmayerroronkeygeneration

lLngResult=(lLngMod*lLngResult)ModModulus

IfErrThenExitFunction

Next

EndIf

Crypt=lLngResult

EndFunction

PrivateFunctionIsPrime(ByRefpLngNumber)

DimlLngSquare

DimlLngIndex

IsPrime=False

IfpLngNumber<2ThenExitFunction

IfpLngNumberMod2=0ThenExitFunction

lLngSquare=Sqr(pLngNumber)

ForlLngIndex=3TolLngSquareStep2

IfpLngNumberModlLngIndex=0ThenExitFunction

Next

IsPrime=True

EndFunction

PublicFunctionEncode(ByValpStrMessage)

DimlLngIndex

DimlLngMaxIndex

DimlBytAscii

DimlLngEncrypted

lLngMaxIndex=Len(pStrMessage)

IflLngMaxIndex=0ThenExitFunction

ForlLngIndex=1TolLngMaxIndex

lBytAscii=Asc(Mid(pStrMessage,lLngIndex,1))

lLngEncrypted=Crypt(lBytAscii,PublicKey)

Encode=Encode&NumberToHex(lLngEncrypted,4)

Next

EndFunction

PublicFunctionDecode(ByValpStrMessage)

DimlBytAscii

DimlLngIndex

DimlLngMaxIndex

DimlLngEncryptedData

Decode=""

lLngMaxIndex=Len(pStrMessage)

ForlLngIndex=1TolLngMaxIndexStep4

lLngEncryptedData=HexToNumber(Mid(pStrMessage,lLngIndex,4))

lBytAscii=Crypt(lLngEncryptedData,PrivateKey)

Decode=Decode&Chr(lBytAscii)

Next

EndFunction

PrivateFunctionNumberToHex(ByRefpLngNumber,ByRefpLngLength)

NumberToHex=Right(String(pLngLength,"0")&Hex(pLngNumber),pLngLength)

EndFunction

PrivateFunctionHexToNumber(ByRefpStrHex)

HexToNumber=CLng("&h"&pStrHex)

EndFunction

EndClass

%>

演示地址:http://www.cnaspol.com/myrsa/test.asp

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类