不会因为提到asp就没人理了吧?
技术无国界!
技术无国界!
解决方案 »
- 关于map的问题
- ?显示错误需要类“ConsoleApplication1.Program”的显式封闭实例来实例化内部类
- 怎样将.zip文件转换成字节流的形式保存?请各位高手指教!!
- 有一个jar文件,我用rar解压后替换其中一个class,然后在生成jar.怎么就不能用了??
- 为什么我的进度条不能显示?
- 在applet中如何使用keypress事件.
- file类实例化,就是创建了对象
- 没事进来看看!来者不一定有分!
- 一个小调查--大家都用什么java的开发平台???
- 用java applet可以对任一已经编好的网页上用鼠标在其上画线吗? 请各位大虾多指教。
- 新手求助--基本常识问题--如何在一台机器上虚拟出在不同JVM上的程序的运行环境
- 高手请进来讨论——如何在java中,用static和final来破坏封装性
String url="http:www:8080:/myAsp.asp";
try{
if (url!=null){
context.showDocument(new URL(url),target);
}
}catch(Exception e1){
JOptionPane.showMessageDialog(null, "alert", "Call ASP Error !", JOptionPane.ERROR_MESSAGE);
}
import java.applet.*;
import java.awt.event.*;
import java.math.*;
import java.util.*;
import netscape.javascript.*;
public class LoginApplet extends java.applet.Applet implements ActionListener{
BigInteger E;
BigInteger N;
final int BLOCKSIZE = 16;
BigInteger ciphertext[] = new BigInteger[100];
String cipher;
TextField text1,text2;
Button button1,button2;
Label label1,label2,label3;
public void init(){
super.init();
String pkn,pke;
pkn=getParameter("pkn");
pke=getParameter("pke");
BigInteger biPke=new BigInteger(pke,16);
BigInteger biPkn=new BigInteger(pkn,16);
E=biPke;
N=biPkn;
Font f = new Font("Helvetica", Font.BOLD, 14);
setLayout(null);
addNotify();
resize(266,106);
label1=new Label("用户登录");
label1.setLocation(2,2);
label1.setSize(120,24);
add(label1);
label2=new Label("用户名:");
label2.setLocation(2,28);
label2.setSize(36,24);
add(label2);
label3=new Label("密码:");
label3.setLocation(2,54);
label3.setSize(36,24);
add(label3);
text1=new TextField();
text1.setLocation(39,28);
text1.setSize(120,24);
add(text1);
text2=new TextField();
text2.setLocation(39,54);
text2.setSize(120,24);
text2.setEchoChar('*');
add(text2);
button1=new Button("确定");
button1.setLocation(164,28);
button1.setSize(40,24);
button1.addActionListener(this);
add(button1);
button2=new Button("取消");
button2.setLocation(164,54);
button2.setSize(40,24);
button2.addActionListener(this);
add(button2);
}
public void actionPerformed(ActionEvent event) {
Object src = event.getSource();
if(src==button2){
text1.setText("");
text2.setText("");
}
else if(src==button1){
String uid,pwd;
uid=text1.getText().trim();
pwd=text2.getText().trim();
int nUID=uid.length();
int nPWD=pwd.length(); if(nUID>3 && nUID <16 && nPWD>5 && nPWD<16){
uid=Encrypt(uid);
pwd=Encrypt(pwd);
try{
JSObject mainWindow = JSObject.getWindow(this);
JSObject document = (JSObject) mainWindow.getMember("document");
JSObject loginForm = (JSObject) document.getMember("loginForm");
JSObject username = (JSObject) loginForm.getMember("username");
JSObject password = (JSObject) loginForm.getMember("password");
username.setMember("value",uid);
password.setMember("value",pwd);
mainWindow.eval("javascript:submitUser()");
}catch(Exception e){
}
}
else{
try{
JSObject mainWindow = JSObject.getWindow(this);
mainWindow.eval("alert('用户名长度必须在4到15之间,密码长度必须在6到15之间!')");
}catch(Exception e){
}
}
}
}
public String Encrypt(String msg) {
byte swap[] = msg.getBytes();
byte segment[];
String str = null,str1=null;
int copies = swap.length / BLOCKSIZE;
if (swap.length % BLOCKSIZE > 0) copies++;
for (int i = 0; i < copies; i++) {
segment = copyBytes(i, swap);
ciphertext[i] = new BigInteger(segment);
ciphertext[i] = ciphertext[i].modPow(E, N);
if (str == null){
str=ciphertext[i].toString(16);
if(str.length()%2!=0) str="0"+str;
}
else{
str1 = ciphertext[i].toString(16);
if(str1.length()%2!=0) str1="0"+str1;
str=str+str1;
}
}
return str;
}
private byte[] copyBytes(int x, byte tmp[]) {
byte swap[] = new byte[BLOCKSIZE];
int count = 0;
for (int i = x * BLOCKSIZE; i < (x+1) * BLOCKSIZE; i++) {
if (i >= tmp.length) break;
swap[count++] = tmp[i];
}
return swap;
}
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>User Login</title>
<script language="javascript">
<!--
function submitUser(){
this.document.loginForm.submit();
}
//-->
</script>
</head>
<body>
<jsp:useBean id="chkuser" scope="session" class="BaseRSA"/>
<form action="checkUser.jsp" method="post" name="loginForm">
<input type="hidden" name="username" value="">
<input type="hidden" name="password" value="">
<applet code="LoginApplet.class" width="206" height="90" MAYSCRIPT>
<param name="pke" value="<jsp:getProperty name="chkuser" property="pke"/>">
<param name="pkn" value="<jsp:getProperty name="chkuser" property="pkn"/>">
</applet>
</form>
</body>
</html>在Applet所在的页面需要MAYSCRIPT属性
import java.math.*;
import java.security.SecureRandom;public class BaseRSA{
private String pkn;
private String pke;
private String pkd; public BaseRSA(){ } public String getPke(){
if(pke==null)
generatePQNTED();
return pke;
} public String getPkd(){
if(pkd==null)
generatePQNTED();
return pkd;
} public String getPkn(){
if(pkn==null)
generatePQNTED();
return pkn;
} public void setPke(String pke){ } public void setPkd(){ } public void setPkn(){ } private void generatePQNTED() {
BigInteger P, Q, N, E, D, T; //P,Q:两个大素数 N,E:公钥 D:私钥
BigInteger ZERO = new BigInteger("0");
BigInteger ONE = new BigInteger("1");
SecureRandom rand = new SecureRandom(); //创建一个随机数发生器 E = new BigInteger(64,10,rand); //把字符串e中的奇数转换成大数
if (E.mod(new BigInteger("2")).equals(ZERO))
E=E.add(new BigInteger("1")); //如果是偶数,+1
do {
P = new BigInteger(128, 10, rand); //用随机数发生器产生的随机数产生128位的素数(概率为1-1/pow(2,10))
Q = new BigInteger(128, 10, rand);
T = (P.subtract(ONE)).multiply(Q.subtract(ONE)); //T=(P-1)*(Q-1)
} while (!(E.gcd(T)).equals(ONE)); //E和T的最大公因子不为1(不互质)
N = P.multiply(Q); // N=P*Q
BigInteger tmp[] = Euclid(E, T);//用欧几里德扩展法计算解密密钥
D = tmp[0]; //D为解密密钥(私钥)
pkn=N.toString(16);
pke=E.toString(16);
pkd=D.toString(16);
} //用欧几里德扩展法计算解密密钥
private BigInteger[] Euclid(BigInteger x, BigInteger y) {
BigInteger ZERO = new BigInteger("0");
BigInteger ONE = new BigInteger("1"); int n = 2;
BigInteger r[] = new BigInteger[3];
BigInteger q[] = new BigInteger[3];
BigInteger u[] = new BigInteger[3];
BigInteger v[] = new BigInteger[3]; r[0] = x;
r[1] = y;
u[0] = new BigInteger("1");
v[0] = new BigInteger("0");
u[1] = new BigInteger("0");
v[1] = new BigInteger("1");
while (!r[(n-1)%3].equals(ZERO)) {
q[n%3] = r[(n-2)%3].divide(r[(n-1)%3]);
r[n%3] = r[(n-2)%3].remainder(r[(n-1)%3]);
// Un = Un-2 - QnUn-1
u[n%3] = u[(n-2)%3].subtract(q[n%3].multiply(u[(n-1)%3]));
// Vn = Vn-2 - QnVn-1
v[n%3] = v[(n-2)%3].subtract(q[n%3].multiply(v[(n-1)%3]));
n++;
}
BigInteger result[] = new BigInteger[2];
result[0] = u[(n-2)%3];
result[1] = v[(n-2)%3];
return result;
}
}