Java Web_ASCII码加密解密

ASCII码加密解密

1.index.jsp:页面输入用户名和密码,通过form表单提交
<
body>

           <form method="post" action="./password" name="cookie">

           <input type="text" name="name" />

           <input type="password" name="password" />

                     <input type="submit" name="submit" value="GO-->>>">

           </form>

</body>

2PassWordServlet.java
protected void doPost(HttpServletRequest request,

           HttpServletResponse response) throws ServletException, IOException {

       request.setCharacterEncoding("UTF-8");

       response.setCharacterEncoding("UTF-8");

       response.setContentType("text/html");

       Users users = new Users();

       // 获取页面传递的参数

       users.setUserName(request.getParameter("name"));

       users.setPassword(request.getParameter("password"));

       UserServer userServer = new UserServer();

       // 将页面参数插入到数据库,生成新的一条记录

       if (userServer.insert(users) > 0) {// 插入数据库成功

           // 根据用户名取得符合条件的用户信息

           Users user2 = userServer.getPassWordById(users);

           if (user2 != null) {

              if (user2.getPassword().equals(users.getPassword())) {

                  System.out.println("----用戶名/密码正确------------");

                  // 页面显示查看密码

                  System.out.println("---"+user2.getUserName());

                  System.out.println("----"+user2.getPassword());

                  request.setAttribute("userName", user2.getUserName());

                  request.setAttribute("passStr", user2.getPassword());

                  request.getRequestDispatcher("/result.jsp").forward(request,

                         response);

              } else {

                  System.out.println("----密码错误-----");

                  response.sendRedirect("./error.jsp");

              }

           } else {

              System.out.println("-----用户不存在-------");

           }

       }

    }

3UserServer.java:连接数据库,插入/查询一条记录

package com.ginger.text;

 

import java.io.Serializable;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

 

public class UserServer implements Serializable {

 

       private static final long serialVersionUID = 1L;

       private String insertSQL;

       private String getPassWordSQL;

       private int flag;

       PreparedStatement past;

       List list;

       ResultSet rs;

       Users users;

       ConDB db;

 

       // 插入一条记录

       public int insert(Users users) {

              db = new ConDB();

              past = db.getPast(this.getInsertSQL());

              try {

                     past.setString(1, users.getUserName());

                     // 将用户名和加密后的密码插入到数据库中

                     past.setString(2, PassWordUtil.Cipher(users.getPassword()));

                     flag = past.executeUpdate();

              } catch (SQLException e) {

                     e.printStackTrace();

              }

              return flag;

       }

 

       // 根据用户名获得用户密码--此处假设用户名是唯一,只取一条记录

       public Users getPassWordById(Users userPro) {

              Users user = null;

              list = new ArrayList();

              db = new ConDB();

              past = db.getPast(this.getPassWordSQL());

              try {

                     past.setString(1, userPro.getUserName());

                     rs = past.executeQuery();

                     while (rs.next()) {

                            users = new Users();

                            users.setUser_id(rs.getString("user_id"));

                            users.setUserName(rs.getString("userName"));

                            users.setPassword(rs.getString("password"));

                            list.add(users);

                     }

                     if (list.size() > 0) {

                            user = (Users) list.get(0);

                            user.setUserName(user.getUserName());

                            // 获得解密后的密码\

                            user.setPassword(PassWordUtil.Decipher(user.getPassword()));

                     }

              } catch (SQLException e) {

                     e.printStackTrace();

              }

              return user;

       }

 

       public String getInsertSQL() {

              this.insertSQL = "insert into users (userName,password) values (?,?)";

              return insertSQL;

       }

 

       public String getPassWordSQL() {

              this.getPassWordSQL = "select * from users where userName=?";

              return getPassWordSQL;

       }

}

4PassWordUtil:对参数进行加密/解密

package com.ginger.text;

 

import java.util.Random;

 

public class PassWordUtil {

 

    // / 加密与解密函数

    static String key = "12345678909887654321";

    static int MIN_ASC = 32;

    static int MAX_ASC = 126;

    static int NUM_ASC = MAX_ASC - MIN_ASC + 1;

 

    // 加密函数

    public static String Cipher(String sSourceStr) {

       String sTemp = "";

       int offset, str_len, i, ch;

       offset = NumericPassword(key);

       //返回一个随机数0<=r<1

       Random random = new Random(-1);

       //使用单个 long 种子设置此随机数生成器的种子

       random.setSeed(offset);

       str_len = sSourceStr.length();

       //将参数字符串的每一个字符一一取出,进行处理

       for (i = 0; i < str_len; i++) {

           ch = sSourceStr.charAt(i);

 

           if (ch >= MIN_ASC && ch <= MAX_ASC) {

              ch = ch - MIN_ASC;

              // 生成序列中的下一个随机数,进行处理

              offset = (int) ((NUM_ASC + 1) * random.nextFloat());

              ch = ((ch + offset) % NUM_ASC);

              ch = ch + MIN_ASC;

              sTemp = sTemp + (char) ch;

           }

       }

       return sTemp.replace("'", "''");

    }

 

    // 解密函数

    public static String Decipher(String sSourceStr) {

       String sTemp = "";

       int offset;

       int str_len;

       int i;

       int ch;

       offset = NumericPassword(key);

       Random random = new Random(-1);

       random.setSeed(offset);

       str_len = sSourceStr.length();

       for (i = 0; i < str_len; i++) {

           ch = sSourceStr.charAt(i);

           if (ch >= MIN_ASC && ch <= MAX_ASC) {

              ch = ch - MIN_ASC;

              offset = (int) ((NUM_ASC + 1) * random.nextFloat());

              ch = ((ch - offset) % NUM_ASC);

              if (ch < 0) {

                  ch = ch + NUM_ASC;

              }

              ch = ch + MIN_ASC;

              // Int类型数据根据ASC码转换成相对应的字符

              sTemp = sTemp + (char) ch;

           }

       }

       return sTemp;

 

    }

 

    // 根据加密参数,生成

    private static int NumericPassword(String cipherText) {

       int Value = 0;

       int ch = 0;

       int shift1 = 0;

       int shift2 = 0;

       int i, str_len;

       str_len = cipherText.length();

       for (i = 0; i < str_len; i++) {

           ch = cipherText.charAt(i);

           Value = Value ^ (ch * 2 * shift1);

           Value = Value ^ (ch * 2 * shift2);

           shift1 = (shift1 + 7) % 19;

           shift2 = (shift2 + 13) % 23;

       }

       return Value;

    }

 

}

 

转载于:https://www.cnblogs.com/southginger/archive/2011/10/09/2203633.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值