使用Xor进行编码和解码

时间:2015-05-09 13:57:16

标签: java jsp encryption xor

我正在尝试创建一个JSP,它从文本区域获取文本,并根据您是选择编码还是解码,对文本进行编码或解码编码文本。编码部分工作,但解码选项抛出

  

org.apache.jasper.JasperException:java.lang.NumberFormatException:对于输入字符串:“”。

这是我的代码:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <h1>Xorcoder</h1>
    <form method="post">
        <label>Key</label><input type="text" name="key" />
        <p>Encode<input type="radio" name="option" value="encode" /></p>
        <p>Decode<input type="radio" name="option" value="decode" /></p>
        <p><textarea name="txt" style="width:400px;height:200px" >
            <%String txt = "";
                int key;
                String option = "";

                if(request.getParameter("txt") != null) {
                    txt = request.getParameter("txt");
                }

                if(request.getParameter("key") != null) {
               key = Integer.parseInt(request.getParameter("key"));
                }
                else {
                    key = 0;
                }

                  if(request.getParameter("option") != null) {  
                option = request.getParameter("option");
                  }

                   char temp;

                   int[] array = new int[(txt.length())];

                      if(option.equals("encode")) {
                      for(int i = 0; i < array.length; i++) {
                       temp = txt.charAt(i);
                       array[i] = temp^key;
                      }


                      for(int i = 0; i < array.length; i++) 
                        out.print(array[i] + " ");
                      }

                      else if(option.equals("decode")){
                      String[] array2 = txt.split(" ");
                      int temp2;

                      for(int i = 0; i < array2.length; i++) {
                          temp2 = Integer.parseInt(array2[i]);
                          temp2 = temp2^key;
                          out.print((char)temp2);                              
                       }                                               
                   }

                      %></textarea></p>
        <p><input type="submit" value="Press" /></p>
        <p><input type="reset" value="Clear" /></p>

    </form>

</body>
</html>

3 个答案:

答案 0 :(得分:2)

问题从这里开始:

  for (int i = 0; i < array.length; i++) 
    out.print(array[i] + " ");
  }

这会在每个数字后面输出一个空格。不在每个号码之间。

然后你将这个字符串分开:

  String[] array2 = txt.split(" ");

和(不出所料)数组的最后一个元素将是一个空字符串。

解决方案:

  1. 不要输出最后的空格。

  2. 在拆分

  3. 之前修剪字符串
  4. 在致电parseInt之前检查字符串是否为空。

  5. (您不需要检查nullsplit的规范保证数组中没有空值...)

答案 1 :(得分:1)

java.lang.NumberFormatException告诉您""不是数字。问题在于您使用Integer.parseInt。在使用Integer.parseInt(...)之前,请检查该元素的输入是否为空(并且不为null,仅在参数可以为null时检查此条件,否则不需要)。如果为空,Integer.parseInt将抛出该错误。

答案 2 :(得分:0)

希望您解决难题所需要做的就是在代码的最后一个循环中添加 if 语句:

for(int i = 0; i < array2.length; i++) {
   if (array2[i].isEmpty()) //checks whether the length of string is 0
      continue; //skips current iteration and moves further
   temp2 = Integer.parseInt(array2[i]);
   temp2 = temp2^key;
   out.print((char)temp2);                              
} 

另外,我想告诉您&lt;%%&gt; 等标签之间没有任何空格,而其他html标签会让您的textarea有所不同清洁器。我的意思是,尝试使用

   <textarea name="txt" style="width:400px;height:200px" ><%

而不是

   <textarea name="txt" style="width:400px;height:200px" >
      <%

这样你的textarea就不会有任何无用的空格字符了。

祝你好运:)