- 先在webcontent导三种数据库的jar包,连tomcate,选apache下的tomcat7,右击项目buildpath
- 定时器,Jason等应该再导六个jar包
- 建立三种数据库连接(DBConnection),用Test测试
- 再创建servlet类的java类(indexservlet),调用数据库连接。可以根据页面( 表名: <input type="text" id="table_name" name="table_name"><br><br>)输入( String table_name =request.getParameter("table_name"))的数据库名选择(if)对应连接,在里面执行其他操作
- 创建jsp,页面(表单form)显示输入数据库名,用户名,表名,列名。可以在数据库查询列且传到页面。
- 创建DaoImpl连到数据库且写出查询列方法和更新列方法,用预处理(PreparedStatement pstmt =conn.prepareStatement(sql))多用try/catch抛出异常方便及时改错。
- 创建Java类写封装可以调用的加密算法
- 在servlet里取得 jsp里输入的数据库名,用户名、、、,if到数据库,查询数据库,遍历while(rs.next()),调用算法加密列中每一行的数据,添加到list,传给页面的文本框里,重定向到页面( ServletContext t = getServletContext(); t.setAttribute("t", key9);// 传给openservlet)。然后再写一个openservlet,先接收,再进行解密,加到list,传给界面。
- 当我再翻到这条自己的博客时,一定是又变成鱼的记忆,存在网盘里,相关各阶段成果物的所有类的txt文件的代码,整个项目的文件,导入的jar包,(apache内存有点大不存了),我记录的图片笔记(关于做出成果物 和未来的及做出的 加密数据封装成Jason 和定时器的制作)和txt笔记(上课的关于Oracle的创建,查询,审计,备份控制文件等)
- 下面第一个是indexservlet(加密控制层),第二个是openservlet(解密控制层)
package com.dhee.servlet;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dhee.common.RC4;
import com.dhee.db.DBConnection;
import com.dhee.db.EmpDaoImpl;
import com.dhee.db.StudentDaoImpl;
import com.mysql.jdbc.StringUtils;
import com.storage.des;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Servlet implementation class ShowServlet
*/
@WebServlet("/IndexServlet")//控制层的名
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
/*public IndexServlet() {
super();
// TODO Auto-generated constructor stub
}*/
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// TODO Auto-generated method stub
String db_type =request.getParameter("db_type").toLowerCase();
String db_username =request.getParameter("db_username");
String db_userpass =request.getParameter("db_userpass");
String table_name =request.getParameter("table_name");
ServletContext y = getServletContext();
y.setAttribute("y", table_name);
String column_name =request.getParameter("column_name");
ServletContext z = getServletContext();
z.setAttribute("z", column_name);
EmpDaoImpl empDao=new EmpDaoImpl();
if(db_type.toLowerCase().equals("mysql")) {
Connection conn=new DBConnection().mysqlDBConnection(db_username,db_userpass);
//根据表名,查询主键
// String p_name=stuDao.p_column(conn, table_name.toUpperCase());
//先取到原来的值scott>加密>新串>更新
//String sqlInsert = "INSERT INTO jkl (username) VALUES ('张三')";
//String sqlselect = "SELECT " + column_name + " FROM " + table_name;
//
//String sqlUpdate = "UPDATE " + table_name + " SET `" + column_name + "` = CONCAT(`" + column_name + "`, '**')";
//List<String> list=empDao.selAll(conn,sqlselect, column_name);
//
//int resultUpdate = empDao.update(conn, sqlUpdate);
//List<String> listSelectUpdated = empDao.selAll(conn, sqlselect, column_name);
//System.out.println(sqlselect+"1111111111");
// System.out.println(list+"2222222222");
//
//System.out.println(listSelectUpdated+"3333333");
/* List<String> list2=new ArrayList<String>(list);
String inputStr = String.join(",",list2);
// String inputStr = "miwen";
String key9 = "12341234567";
String str = RC4.encry_RC4_string(inputStr, key9);
System.out.println(str+"1");
System.out.println(RC4.decry_RC4(str, key9)+"2");
System.out.println("加密后是:stra is : "+ str+"5");
System.out.println("解密后的明文是: "+RC4.decry_RC4(str, key9)+"6");
*/
// //
//getInt(1)方法将从ResultSet对象中提取第一列的值(即行数),并将其转换为整数类型。
/* if (rss.next()) {
int rowCount = rss.getInt(1);
System.out.println(rowCount);
} else {
// 查询未返回任何结果//如果查询没有返回任何结果,则返回-1或抛出异常。
}*/
try {
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table_name);//获取了结果集rs
// ServletContext v = getServletContext();
// v.setAttribute("v", rs);
while (rs.next()) {
String currentData = rs.getString(column_name);
/* String sqlUpdate = "UPDATE " + table_name + " SET `" + column_name + "` = `" + currentData + "`";
PreparedStatement update = conn.prepareStatement(sqlUpdate);
update.executeUpdate();
*/
String inputStr = currentData;
String key9 = "12341";
String str = RC4.encry_RC4_string(inputStr, key9);
System.out.println(str+"111111");
ServletContext s = getServletContext();
s.setAttribute("s", str);
ServletContext t = getServletContext();
t.setAttribute("t", key9);
ServletContext u = getServletContext();
u.setAttribute("u", inputStr);
ServletContext w = getServletContext();
w.setAttribute("w", conn);
ServletContext x = getServletContext();
x.setAttribute("x", stmt);
System.out.println(RC4.decry_RC4(str, key9)+"2");
System.out.println("加密后是:stra is : "+ str+"3");
System.out.println("解密后的明文是: "+RC4.decry_RC4(str, key9)+"4");
//String encryptedData = encrypt(currentData);
// 加密函数
rs.updateString(column_name, str);
rs.updateRow();
System.out.println(inputStr+"aaaaaa");
System.out.println(str+"bbbb");
/*if (!rs.isLast()) {
rs.next(); // 移动到下一行
}*/
}
String sqlselect = "SELECT " + column_name + " FROM " + table_name;
List<String> list=empDao.selAll(conn,sqlselect, column_name);
List<String> list2=new ArrayList<String>(list);
String wholeStr = String.join(",",list2);
ServletContext a = getServletContext();
a.setAttribute("a", list2);
request.setAttribute("f_list", wholeStr);
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
// 当没有抛出异常时,执行重定向
// response.sendRedirect(request.getContextPath() + "/huoqv.jsp");
} catch (Exception e) {
// 处理重定向操作引发的异常
e.printStackTrace();
// 使用转发或其他方式返回错误页面或者错误信息
request.setAttribute("error_msg", "页面跳转失败,请联系管理员");
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
}
}
// response.sendRedirect(request.getContextPath() + "/index.jsp");
/*int result =new EmpDaoImpl().update(conn,sql);
//处理DAO返回的结果。在页面显示成功或失败的内容
if(result>0){
// System.out.println(result);
response.getWriter().write("success");
}else{
response.getWriter().write("error");
}
*/
if(db_type.toLowerCase().equals("mssql")) {
try {
Connection conn = new DBConnection().mssqlDBConnection(db_username,db_userpass);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table_name);//获取了结果集rs
while (rs.next()) {
String currentData = rs.getString(column_name);
/* String sqlUpdate = "UPDATE " + table_name + " SET `" + column_name + "` = `" + currentData + "`";
PreparedStatement update = conn.prepareStatement(sqlUpdate);
update.executeUpdate();
*/
String inputStr = currentData;
Random random = new Random();
int min = 1;
int max = 8; // 注意这里是101而不是100,因为nextInt()方法不包括上限值
int randomNumber = random.nextInt(max - min) + min;
System.out.println("1到8之间的随机密匙:" + randomNumber);
String str1 = String.valueOf(randomNumber); // 使用String.valueOf()方法
String str2 = Integer.toString(randomNumber); // 使用Integer.toString()方法
String str3 = randomNumber + ""; // 将int变量连接到一个空字符串上
System.out.println(str1); // 输出:123
System.out.println(str2); // 输出:123
System.out.println(str3); // 输出:123
String key9 = str2;
//String key9 = "12341";
String str = RC4.encry_RC4_string(inputStr, key9);
System.out.println(str+"111111");
ServletContext s = getServletContext();
s.setAttribute("s", str);
ServletContext t = getServletContext();
t.setAttribute("t", key9);
ServletContext u = getServletContext();
u.setAttribute("u", inputStr);
ServletContext w = getServletContext();
w.setAttribute("w", conn);
ServletContext x = getServletContext();
x.setAttribute("x", stmt);
System.out.println(RC4.decry_RC4(str, key9)+"2");
System.out.println("加密后是:stra is : "+ str+"3");
System.out.println("解密后的明文是: "+RC4.decry_RC4(str, key9)+"4");
// 加密函数
rs.updateString(column_name, str);
rs.updateRow();
System.out.println(inputStr+"aaaaaa");
System.out.println(str+"bbbb");
}
String sqlselect = "SELECT " + column_name + " FROM " + table_name;
List<String> list=empDao.selAll(conn,sqlselect, column_name);
List<String> list2=new ArrayList<String>(list);
String wholeStr = String.join(",",list2);
ServletContext a = getServletContext();
a.setAttribute("a", list2);
request.setAttribute("f_list", wholeStr);
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
/*while (rs.next()) {
String encryptedData = str;
rs.updateString(column_name, encryptedData);
rs.updateRow();
System.out.println(inputStr+"aaaaaa");
System.out.println(str+"aaaaaa");
if (!rs.isLast()) {
rs.next(); // 移动到下一行
}
}
String sqlselect = "SELECT " + column_name + " FROM " + table_name;
List<String> list=empDao.selAll(conn,sqlselect, column_name);
List<String> list2=new ArrayList<String>(list);
String wholeStr = String.join(",",list2);
request.setAttribute("f_list", wholeStr);
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
// 当没有抛出异常时,执行重定向
// response.sendRedirect(request.getContextPath() + "/huoqv.jsp");
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
// 处理重定向操作引发的异常
e.printStackTrace();
// 使用转发或其他方式返回错误页面或者错误信息
request.setAttribute("error_msg", "页面跳转失败,请联系管理员");
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
}
}
if (db_type.toLowerCase().equals("oracle")) {
try {
Connection conn = new DBConnection().oracleDBConnection(db_username,db_userpass);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table_name);//获取了结果集rs
while (rs.next()) {
String currentData = rs.getString(column_name);
String inputStr = currentData;// 加密函数调用
String key9 = "12341234567";
String str = RC4.encry_RC4_string(inputStr, key9);
System.out.println(str+"1");
System.out.println(RC4.decry_RC4(str, key9)+"2");
System.out.println("加密后是:stra is : "+ str+"3");
System.out.println("解密后的明文是: "+RC4.decry_RC4(str, key9)+"4");
ServletContext s = getServletContext();
s.setAttribute("s", str);
ServletContext t = getServletContext();
t.setAttribute("t", key9);
ServletContext u = getServletContext();
u.setAttribute("u", inputStr);
ServletContext v = getServletContext();
v.setAttribute("v", rs);
ServletContext w = getServletContext();
w.setAttribute("w", conn);
ServletContext x = getServletContext();
x.setAttribute("x", stmt);
String encryptedData = str;
rs.updateString(column_name, encryptedData);
rs.updateRow();
System.out.println(inputStr+"aaaaaa");
System.out.println(str+"aaaaaa");
if (!rs.isLast()) {
rs.next(); // 移动到下一行
}
}
String sqlselect = "SELECT " + column_name + " FROM " + table_name;
List<String> list=empDao.selAll(conn,sqlselect, column_name);
List<String> list2=new ArrayList<String>(list);
String wholeStr = String.join(",",list2);
request.setAttribute("f_list", wholeStr);
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
// 当没有抛出异常时,执行重定向
// response.sendRedirect(request.getContextPath() + "/huoqv.jsp");
rs.close();
stmt.close();
conn.close();
*/
} catch (Exception e) {
// 处理重定向操作引发的异常
e.printStackTrace();
// 使用转发或其他方式返回错误页面或者错误信息
request.setAttribute("error_msg", "页面跳转失败,请联系管理员");
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
}
}}}
package com.dhee.servlet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dhee.common.RC4;
import com.dhee.db.DBConnection;
import com.dhee.db.EmpDaoImpl;
import com.dhee.db.StudentDaoImpl;
import com.mysql.jdbc.StringUtils;
import com.storage.des;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dhee.common.RC4;
import com.dhee.db.DBConnection;
import com.dhee.db.EmpDaoImpl;
import com.dhee.ever.DBConnection1;
/**
* Servlet implementation class OpenServlet
*/
@WebServlet("/open")
public class OpenServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public OpenServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String db_type =request.getParameter("db_type").toLowerCase();
String db_username =request.getParameter("db_username");
String db_userpass =request.getParameter("db_userpass");
//String table_name =request.getParameter("table_name");
//String column_name =request.getParameter("column_name");
EmpDaoImpl empDao=new EmpDaoImpl();
try{
/*
while (rs.next()) {
String currentData = rs.getString(column_name);
/* String sqlUpdate = "UPDATE " + table_name + " SET `" + column_name + "` = `" + currentData + "`";
PreparedStatement update = conn.prepareStatement(sqlUpdate);
update.executeUpdate();
*/
/* String inputStr = currentData;
String key9 = "12341234567";
String str = RC4.encry_RC4_string(inputStr, key9);
System.out.println(str+"1");
System.out.println(RC4.decry_RC4(str, key9)+"2");
System.out.println("加密后是:stra is : "+ str+"3"); */
//在其他 Servlet 中获取ServletContext中保存的解密后的数据
ServletContext s = getServletContext();
String str = (String) s.getAttribute("s");
ServletContext t = getServletContext();
String key9 = (String) t.getAttribute("t");
ServletContext u = getServletContext();
String inputStr = (String) u.getAttribute("u");
//ServletContext v = getServletContext();
//ResultSet rs = (ResultSet) v.getAttribute("v");
ServletContext w = getServletContext();
Connection conn = (Connection) w.getAttribute("w");
ServletContext x = getServletContext();
Statement stmt = (Statement) x.getAttribute("x");
ServletContext y = getServletContext();
String table_name = (String) y.getAttribute("y");
ServletContext z = getServletContext();
String column_name = (String) z.getAttribute("z");
ServletContext a = getServletContext();
List<String> list2 = (List<String>) a.getAttribute("a");
//servletContext.setAttribute("decryptedData", str); // 将新值保存回ServletContext中
//String decryptedData = RC4.decry_RC4(str, key9);
//System.out.println("解密后的明文是: "+decryptedData);
//System.out.println("解密后的明文是: "+RC4.decry_RC4(str, key9)+"4");
// 加密函数
List<String> decryptedList = new ArrayList<>();
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table_name );
List<String> encryptedList = list2;//加密后的list
List<String> decryptedList6 = new ArrayList<>();//存储解密后的list
for (String encryptedStr : encryptedList) {
String decryptedStr = RC4.decry_RC4(encryptedStr,key9);
decryptedList6.add(decryptedStr);
System.out.println("for循环的解密后1的list是: "+encryptedStr);
System.out.println("for循环的解密后2的list是: "+decryptedStr);
System.out.println("for循环的解密后3的list是: "+decryptedList6);
}
System.out.println("for循环的解密后的list是: "+decryptedList6);
List<String> list3=new ArrayList<String>(decryptedList6);
String wholeStr = String.join(",",list3);
/*
String sqlselect = "SELECT " + column_name + " FROM " + table_name;
List<String> list=empDao.selAll(conn,sqlselect, column_name);
List<String> list2=new ArrayList<String>(list);
String wholeStr2 = String.join(",",list2);
*/
request.setAttribute("r_list", wholeStr);
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
/* String wholeStr = String.join(",",decryptedData);
request.setAttribute("f_list", wholeStr);
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
*/// 当没有抛出异常时,执行重定向
// response.sendRedirect(request.getContextPath() + "/huoqv.jsp");
/* rs.close();
stmt.close();
conn.close();
*/
} catch (Exception e) {
// 处理重定向操作引发的异常
e.printStackTrace();
// 使用转发或其他方式返回错误页面或者错误信息
request.setAttribute("error_msg", "页面跳转失败,请联系管理员");
request.getRequestDispatcher("/huoqv.jsp").forward(request, response);
}
}
}