加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

利用VBScript类在Asp中进行RSA加密和解密

发布时间:2023-08-03 14:43:46 所属栏目:Asp教程 来源:
导读:本文章有两文件组成

test.asp 测试演示文件

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

下面是代码:

1. test.asp

<%

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

rem 收集整理:yane
本文章有两文件组成
 
test.asp 测试演示文件
 
clsrsa.asp 实现rsa加密与解密的vbs类文件
 
下面是代码:
 
1. test.asp
 
<%
 
rem 文章标题:在asp中通过vbs类实现rsa加密与解密
 
rem 收集整理:yanek
 
rem 联系:[email protected]
 
%>
 
<%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 联系:[email protected]
 
' 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 can't crypt/decrypt a byte
 
loop while not testcrypt(255)
 
end sub
 
private function testcry
 
|||pt(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
 
%>
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章