欢迎光临
我们一直在努力

在asp中通过vbs类实现rsa加密与解密

建站超值云服务器,限时71元/月

本文章有两文件组成

test.asp 测试演示文件

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

下面是代码:

1. test.asp

<%

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

rem 收集整理:yanek

rem 联系:aspboy@263.net

%>

<%option explicit%>

<!–#include file="clsrsa.asp"–>

<%

dim lngkeye

dim lngkeyd

dim lngkeyn

dim strmessage

dim objrsa

if not request.form = "" then

lngkeye = request.form("keye")

lngkeyd = request.form("keyd")

lngkeyn = request.form("keyn")

strmessage = request.form("message")

set objrsa = new clsrsa

select case request.form("action")

case "generate keys"

call objrsa.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)

end select

set objrsa = nothing

end if

%>

<html>

<head>

<title>rsa cipher demonstration</title>

</head>

<body>

<h1>rsa cipher demonstration</h1>

<p>

you will first need to generate your public/privage key-pair

before you can encrypt/decrypt messages.

</p>

<form method="post">

<table>

<tr>

<td>public key</td>

<td><input name="keye" value="<%=server.htmlencode(lngkeye)%>"></td>

<td rowspan="3">

<input type="submit" name="action" value="generate keys">

</td>

</tr>

<tr>

<td>private key</td>

<td><input name="keyd" value="<%=server.htmlencode(lngkeyd)%>"></td>

</tr>

<tr>

<td>modulus</td>

<td><input name="keyn" value="<%=server.htmlencode(lngkeyn)%>"></td>

</tr>

<tr>

<td colspan="3">

test message:<br>

<textarea name="message" cols="50" rows="7"><%=server.htmlencode(strmessage)%></textarea>

</td>

</tr>

<tr>

<td align="right" colspan="3">

<input type="submit" name="action" value="encrypt">

<input type="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

rsa encryption class

.privatekey

your personal private key. keep this hidden.

.publickey

key for others to encrypt data with.

.modulus

used with both public and private keys when encrypting

and decrypting data.

.genkey()

creates public/private key set and modulus

.crypt(plngmessage, plngkey)

encrypts/decrypts message and returns

as a string.

.encode(pstrmessage)

encrypts message and returns in double-hex format

.decode(pstrmessage)

decrypts message from double-hex format and returns a string

class clsrsa

public privatekey

public publickey

public modulus

public sub genkey()

dim llngphi

dim q

dim p

randomize

do

do

2 random primary numbers (0 to 1000)

do

p = rnd * 1000 \ 1

loop while not isprime(p)

do

q = rnd * 1000 \ 1

loop while not isprime(q)

n = product of 2 primes

modulus = p * q \ 1

random decryptor (2 to n)

privatekey = rnd * (modulus – 2) \ 1 + 2

llngphi = (p – 1) * (q – 1) \ 1

publickey = euler(llngphi, privatekey)

loop while publickey = 0 or publickey = 1

loop if we cant crypt/decrypt a byte

loop while not testcrypt(255)

end sub

private function testcrypt(byref pbytdata)

dim lstrcrypted

lstrcrypted = crypt(pbytdata, publickey)

testcrypt = crypt(lstrcrypted, privatekey) = pbytdata

end function

private function euler(byref plngphi, byref plngkey)

dim llngr(3)

dim llngp(3)

dim llngq(3)

dim llngcounter

dim llngresult

euler = 0

llngr(1) = plngphi: llngr(0) = plngkey

llngp(1) = 0: llngp(0) = 1

llngq(1) = 2: llngq(0) = 0

llngcounter = -1

do until llngr(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) mod llngr(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))

if llngresult > 0 then

euler = llngp(1)

else

euler = abs(llngp(1)) + plngphi

end if

end function

public function crypt(plngmessage, plngkey)

on error resume next

dim llngmod

dim llngresult

dim llngindex

if plngkey mod 2 = 0 then

llngresult = 1

for llngindex = 1 to plngkey / 2

llngmod = (plngmessage ^ 2) mod modulus

mod may error on key generation

llngresult = (llngmod * llngresult) mod modulus

if err then exit function

next

else

llngresult = plngmessage

for llngindex = 1 to plngkey / 2

llngmod = (plngmessage ^ 2) mod modulus

on error resume next

mod may error on key generation

llngresult = (llngmod * llngresult) mod modulus

if err then exit function

next

end if

crypt = llngresult

end function

private function isprime(byref plngnumber)

dim llngsquare

dim llngindex

isprime = false

if plngnumber < 2 then exit function

if plngnumber mod 2 = 0 then exit function

llngsquare = sqr(plngnumber)

for llngindex = 3 to llngsquare step 2

if plngnumber mod llngindex = 0 then exit function

next

isprime = true

end function

public function encode(byval pstrmessage)

dim llngindex

dim llngmaxindex

dim lbytascii

dim llngencrypted

llngmaxindex = len(pstrmessage)

if llngmaxindex = 0 then exit function

for llngindex = 1 to llngmaxindex

lbytascii = asc(mid(pstrmessage, llngindex, 1))

llngencrypted = crypt(lbytascii, publickey)

encode = encode & numbertohex(llngencrypted, 4)

next

end function

public function decode(byval pstrmessage)

dim lbytascii

dim llngindex

dim llngmaxindex

dim llngencrypteddata

decode = ""

llngmaxindex = len(pstrmessage)

for llngindex = 1 to llngmaxindex step 4

llngencrypteddata = hextonumber(mid(pstrmessage, llngindex, 4))

lbytascii = crypt(llngencrypteddata, privatekey)

decode = decode & chr(lbytascii)

next

end function

private function numbertohex(byref plngnumber, byref plnglength)

numbertohex = right(string(plnglength, "0") & hex(plngnumber), plnglength)

end function

private function hextonumber(byref pstrhex)

hextonumber = clng("&h" & pstrhex)

end function

end class

%>

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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在asp中通过vbs类实现rsa加密与解密
分享到: 更多 (0)

相关推荐

  • 暂无文章