《字符串加密》方法之一

转自  http://fkuman.blog.163.com/blog/static/698454320078103503258/
  通过网络传输信息在日常生活和工作中已变得非常重要了,但也存在不可避免的危险。例如通过网络传输的有价值的信息经常会被拦截或窃取。这时人们选择了加密技术,加密过的信息即使被别人窃取,也不会显示真实的内容。运行本实例,在“标题”文本框中输入“字符串加密!”,在“内容”文本框中输入“加密:密文=明文 异或 密钥”,如下图所示。

《字符串加密》 - 沧海 - 沧海

字符串加密

  单击“留言”按钮,将出现如下图所示的页面提示信息。

《字符串加密》 - 沧海 - 沧海

  这时加密后的内容已经保存到指定数据表“tb_jm_str”中了。如下图所示。

《字符串加密》 - 沧海 - 沧海

加密后的字符串

  当我们点击“返回”按钮回到初始页面中,在“标题”文本框中输入“字符串加密!”,如下图所示。

《字符串加密》 - 沧海 - 沧海

  点击“查看”按钮,即可看到刚才输入的内容,如下图所示。 

《字符串加密》 - 沧海 - 沧海

 

技术要点

  本实例采用的加密算法是变换法。将用户输入的字符串表示为明文,加密后的内容表示为密文。算法如下:

  加密:密文=明文 异或 密钥。

  解密:明文=密文 异或 密钥。

  密钥设置如下:

  int key[]={96,44,63,80}

 

实现过程

(1)新建一个对数据库操作的DB类文件。DB.java代码如下:

package com.safe.DataJM;

 

import java.sql.*;

 

public class DB {

    private Connection con;

    private Statement stm;

    private ResultSet rs;

    private String classname="com.microsoft.sqlserver.jdbc.SQLServerDriver";

    private String url="jdbc:sqlserver://localhost:1433;DatabaseName=db_database15";

 

    public DB(){}

    public Connection getCon(){

           try{

                  Class.forName(classname);

           }

           catch(ClassNotFoundException e){

                  e.printStackTrace();

           }

           try{

               con=DriverManager.getConnection(url,"admin","123456");

           }

           catch(Exception e){

               e.printStackTrace(System.err);

                  con=null;

           }

           return con;

    }

    public Statement getStm(){

        try{

           con=getCon();

           stm=con.createStatement();

        }catch(Exception e){e.printStackTrace(System.err);}

         return stm;

      }

      public Statement getStmed(){

        try{

           con=getCon();

           stm=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

        }catch(Exception e){e.printStackTrace(System.err);}

        return stm;

    }

      public ResultSet search(String sql){

        if(sql==null)sql="";

        System.out.println("sql:"+sql);

              try{

                  stm=getStmed();

                  rs=stm.executeQuery(sql);

               }

              catch(Exception e){e.printStackTrace();}

        return rs;

      }

      public int dosql(String sql){

        int num=-1;

             if(sql==null)sql="";

              try{

                  stm=getStmed();

                  num=stm.executeUpdate(sql);

               }

              catch(Exception e){e.printStackTrace();num=-1;}

        return num;

      }

      public void closed(){

            try{

                  if(rs!=null)rs.close();

           }

           catch(Exception e){e.printStackTrace();}

            try{

                  if(stm!=null)stm.close();

           }

           catch(Exception e){e.printStackTrace();}

            try{

                  if(con!=null)con.close();

           }

           catch(Exception e){e.printStackTrace();}

    }

}

 

(2)创建对字符串进行加密与解密操作的JM类文件。JM.java代码如下:

package com.safe.DataJM;

 

public class JM {

       private String needjam="";   //用户输入的需要被加密的字符串

       private String overjam="";   //加密过的字符串

       private String needjem="";   //需要被解密的字符串

       private String overjem="";   //解密后的字符串

       private int key[]={96,44,63,80};

       public JM(){}

       public void setNeedjam(String needjam){

              this.needjam=changeES(needjam);

              jam_str();

       }

       public String getNeedjam(){

              return this.needjam;

       }

       public String getOverjam(){

              return this.overjam;

       }

       public void setNeedjem(String needjem){

              this.needjem=needjem;

              jem_str();

       }

       public String getOverjem(){

              return this.overjem;

       }

       private String changeES(String str){

              str=str.replaceAll("\r\n","<br>");

              str=str.replaceAll(" ","&nbsp;");

              return str;

       }

       private void jam_str(){

              int i=0;

              int k=0;

              int ikey=0;

              int ineedjam=0;

              int kn=0;

              String temp="";

              while(i<this.needjam.length()){

                     ikey=this.key[k];

                     ineedjam=(this.needjam).substring(i,i+1).hashCode();

                     kn=ineedjam^ikey;

               temp+=Character.toString((char)kn);

                     if(k<3)

                            k+=1;

                     else

                            k=0;

                     i++;

              }

              this.overjam=temp;

              System.out.println("输入的::"+this.needjam);

              System.out.println("加密的::"+temp);

             

       }

       private void jem_str(){

              int i=0;

              int k=0;

              int ikey=0;

              int ineedjem=0;

              int kn=0;

              String temp="";

              while(i<this.needjem.length()){

                     ikey=this.key[k];

                     ineedjem=(this.needjem).substring(i,i+1).hashCode();

                     kn=ineedjem^ikey;

               temp+=Character.toString((char)kn);

                     if(k<3)

                            k+=1;

                     else

                            k=0;

                     i++;

              }

              this.overjem=temp;

              System.out.println("输入的::"+this.needjam);

              System.out.println("加密的::"+this.overjam);

              System.out.println("解密的::"+this.overjem);

       }

 

}

 

(3)创建一个首页面index.jsp,该页面是一个简单的留言板页面。要求用户输入标题和内容。在该页面中用户还可以进行查看留言操作。当用户单击“查看”按钮时,Form表单被提交到show.jsp页面查询并显示相应信息;当用户单击“留言”按钮时,Form表单被提交到dojam.jsp页面进行加密和插入操作。index.jsp代码如下:

<%@ page contentType="text/html;charset=gb2312"%>

<html>

<head>

 <title>字符串加密</title>

 <link rel="stylesheet" type="text/css" href="css/style.css">

</head>

<script type="text/javascript">

  function change(linkpage){

    document.jmform.action=linkpage;

    return true;

  }

</script>

<body>

 <center>

  <form action="dojam.jsp" name="jmform">

   <table  style="margin-top:100" cellspacing="0" border="1" bordercolor="black" bordercolorlight="black" bordercolordark="white">

    <tr>

      <td colspan="3" align="center" bgcolor="lightgrey" height="25">

         将用户输入的字符串进行加密!

      </td>

    </tr>

    <tr>

     <td align="right">标题:</td>

     <td><input type="text" name="title" size="25"></td>

     <td align="center"><input type="submit" name="search" value="查看" οnclick=change("show.jsp")></td>

    </tr>

    <tr>

     <td align="right">内容:</td>

     <td align="center" colspan="2"><textarea name="context" rows="4" cols="25" style="border:1 solid" wrap="hard"></textarea></td>

    </tr>

    <tr>

     <td align="center" colspan="3">

       <input type="submit" name="submit" value="留言">

       <input type="reset" name="reset" value="重置">

     </td>

    </tr>

   </table>

  </form>

 </center>

</body>

   

(4)创建一个dojam.jsp页面。在该页面中调用JM类中的setNeedjam()方法对用户输入的留言内容进行加密后,将其插入到数据库中。其代码如下:

<%@ page contentType="text/html;charset=gb2312"%>

<jsp:useBean id="myjm" class="com.safe.DataJM.JM" scope="page"/>

<jsp:useBean id="mydb" class="com.safe.DataJM.DB"/>

<%

  String mess="";

  boolean mark=true;

  String title=request.getParameter("title");

  if(title==null)

         title="";

      title=new String(title.getBytes("ISO-8859-1"),"gbk");

  String context=request.getParameter("context");

  if(context==null)

        context="";

      context=new String(context.getBytes("ISO-8859-1"),"gbk");

  if(title.equals("")){

      mess="<li>请输入<b>留言标题!</b></li><br>";

         mark=false;        

  }

  if(context.equals("")){

         mark=false;

         mess+="<li>请输入<b>留言内容!</b></li>";

  }

  if(mark){

         myjm.setNeedjam(context);

         String sql="insert into tb_jm_str values('"+title+"','"+myjm.getOverjam()+"')";

         int i=mydb.dosql(sql);

         mydb.closed();

         if(i>0){

                mess="操作成功!";

         }

         else{

                mess="操作失败!";

         }

  }

%>

<html>

<head>

 <title>字符串加密</title>

 <link rel="stylesheet" type="text/css" href="css/style.css">

</head>

<body>

 <center>

  <table  width="230" height="70" style="margin-top:100" cellspacing="0" border="1" bordercolor="black" bordercolorlight="black" bordercolordark="white">

   <tr bgcolor="lightgrey">

    <td align="center">友情提示!</td>

   </tr>

   <tr>

    <td align="center"><%=mess%></td>

   </tr>

  </table>

  <a href="index.jsp">[返回]</a>

 </center>

</body>

 

(5)创建一个show.jsp页面显示用户查询到的留言信息。在该页面中首先从数据库中查询出信息,然后调用JM类中的setNeedjem()方法进行解密后输出。其代码如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*" %>

<jsp:useBean id="myjm" class="com.safe.DataJM.JM" scope="page"/>

<jsp:useBean id="mydb" class="com.safe.DataJM.DB"/>

<html>

<head>

 <title>字符串加密</title>

 <link rel="stylesheet" type="text/css" href="css/style.css">

</head>

<body>

 <center>

  <table  width="250" height="70" style="margin-top:100" cellspacing="0" border="1" bordercolor="black" bordercolorlight="black" bordercolordark="white">

   <tr bgcolor="lightgrey" height="25">

    <td align="center" colspan="2">友情提示!</td>

   </tr>

<%

  boolean mark =true;

  ResultSet rs=null;

  String mess="";

  String title=request.getParameter("title");

  if(title==null)

         title="";

      title=new String(title.getBytes("ISO-8859-1"),"gbk");

  if(title.equals("")){

      mess="请输入要查看的留言标题!";

      mark=false;

  }

  else{

         String sql="select * from tb_jm_str where text_title='"+title+"'";

         rs=mydb.search(sql);

         if(!rs.next()){

                mess="输入的留言标题不存在!";

                mark=false;

         }

         else{

                mark=true;

         }

  }

  if(!mark){

%>

    <tr><td align="center"><%=mess%></td></tr>

<%}

  else{

         rs.previous();

         while(rs.next()){

                String context=rs.getString("text_context");

             myjm.setNeedjem(context);

%>

  <tr>

   <td align="center" bgcolor="lightgrey" height="25">标题:</td>

   <td align="center" bgcolor="lightgrey" height="25">内容:</td>

  </tr>

  <tr>

   <td align="center"><%=title %></td>

   <td align="left"><%=myjm.getOverjem()%></td>

  </tr>

<% 

      }

         mydb.closed();

  }

%>

  </table>

  <a href="index.jsp">[返回]</a>

 </center>

</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值