数据库加密解密RC4传数据库成果物

2dbd29d387d04962af58cc8f5f446912.png

 

  1. 先在webcontent导三种数据库的jar包,连tomcate,选apache下的tomcat7,右击项目buildpath
  2. 定时器,Jason等应该再导六个jar包
  3. 建立三种数据库连接(DBConnection),用Test测试
  4. 再创建servlet类的java类(indexservlet),调用数据库连接。可以根据页面( 表名: <input type="text" id="table_name" name="table_name"><br><br>)输入( String  table_name =request.getParameter("table_name"))的数据库名选择(if)对应连接,在里面执行其他操作
  5. 创建jsp,页面(表单form)显示输入数据库名,用户名,表名,列名。可以在数据库查询列且传到页面。
  6. 创建DaoImpl连到数据库且写出查询列方法和更新列方法,用预处理(PreparedStatement pstmt =conn.prepareStatement(sql))多用try/catch抛出异常方便及时改错。
  7. 创建Java类写封装可以调用的加密算法
  8. 在servlet里取得 jsp里输入的数据库名,用户名、、、,if到数据库,查询数据库,遍历while(rs.next()),调用算法加密列中每一行的数据,添加到list,传给页面的文本框里,重定向到页面( ServletContext t = getServletContext(); t.setAttribute("t", key9);// 传给openservlet)。然后再写一个openservlet,先接收,再进行解密,加到list,传给界面。
  9. 当我再翻到这条自己的博客时,一定是又变成鱼的记忆,存在网盘里,相关各阶段成果物的所有类的txt文件的代码,整个项目的文件,导入的jar包,(apache内存有点大不存了),我记录的图片笔记(关于做出成果物 和未来的及做出的 加密数据封装成Jason 和定时器的制作)和txt笔记(上课的关于Oracle的创建,查询,审计,备份控制文件等)
  10. 下面第一个是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);
		            }
	}
	}      
			  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值