不会因为提到asp就没人理了吧?
技术无国界!

解决方案 »

  1.   

    Call ASP:  AppletContext context=getAppletContext();
      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);
                }
      

  2.   

    楼上的不是用的post方式而是有的get方式
      

  3.   

    import java.awt.*;
    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;
        }
    }
      

  4.   

    这是我用RSA实现安全登录的一个程序,注意其中当button1被按下的部分,通过mainWindow。eval调用页面中的javascript函数,实现提交。<%@ page language="java" import="BaseRSA"%>
    <!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属性
      

  5.   

    netscape.javascript.JSObject类在你的机器里肯定有,用操作系统的搜索功能,包含文字“JSObject”找到文件,把它的内容解压缩到你的工作目录就可以了
      

  6.   

    把BaseRSA.java一起给你吧
    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;
        }
    }