通过Java类实现HTML表单加密

通过Java类实现HTML表单加密,java,javascript,html,encryption,Java,Javascript,Html,Encryption,下面我有一个非常简单的例子来说明我想做什么。我的Java类“CommonUtils”有一个加密和解密字符串的方法。我想在将logonuidfield和logonpassfield写入cookie之前对它们进行加密。我知道直接从Javascript调用CommonUtils.xorEncode(~)是不可能的,但是有没有可能在编写cookie之前通过CommonUtils.xorEncode(~)传递这些字段的值 我不想用javascript编写加密方法。我更希望它是由Java类完成的。我猜如果不

下面我有一个非常简单的例子来说明我想做什么。我的Java类“CommonUtils”有一个加密和解密字符串的方法。我想在将logonuidfield和logonpassfield写入cookie之前对它们进行加密。我知道直接从Javascript调用CommonUtils.xorEncode(~)是不可能的,但是有没有可能在编写cookie之前通过CommonUtils.xorEncode(~)传递这些字段的值

我不想用javascript编写加密方法。我更希望它是由Java类完成的。我猜如果不使用LiveConnect或类似的工具,我想做的事情是不可能的

提前谢谢

<%@ page import="package.CommonUtils" %>

<HTML>
<SCRIPT LANGUAGE=JavaScript>
function setCookies() {
    var email = document.getElementById("logonuidfield").value;
    var password = document.getElementById("logonpassfield").value;

    writeCookie("EmailText",email);
    writeCookie("PasswordText",password);      
}

function writeCookie(name, value) {
    document.cookie = name + "=" + escape(value);
}
</script>

<body>
<tr>
    <td>
        <%  
            String message = "This is a test message.";

            out.println("<Label>This is the original message: " + message + "</Label><br>");
            out.println("<Label>Hex before encrypting       : " + CommonUtils.printStringHex(message)  + "</Label><br>");
            message = CommonUtils.xorEncode(message);
            out.println("<Label>Hex after encrypting        : " + CommonUtils.printStringHex(message) + "</Label><br>");
            message = CommonUtils.xorDecode(message);
            out.println("<Label>Hex after decrypting        : " + CommonUtils.printStringHex(message) + "</Label><br>");
            out.println("<Label>This is the final message   : " + message + "</Label><br>");
        %>
    </td>
</tr>
<FORM name="logonForm" id="logonForm" autocomplete="off" onsubmit="setCookies()" method="post" action="" >
    <li>                                    
        <input type="text" id="logonuidfield" placeholder="email address*" style="width: 100%" name="j_user" type="email" value="" title="Email address *"/>
    </li>
    <li>
        <input type="password" id="logonpassfield" placeholder="Password*" style="width: 100%" name="j_password" />
    </li>
    <li>
        <input type="submit" value="Log in" name="uidPasswordLogon"/>
    </li>
</form>

函数setCookies(){
var email=document.getElementById(“logonuidfield”).value;
var password=document.getElementById(“logonpassfield”).value;
writeCookie(“EmailText”,电子邮件);
writeCookie(“密码文本”,PasswordText);
}
函数writeCookie(名称、值){
document.cookie=名称+“=”+转义(值);
}

  • 请注意您的请求/响应周期:

  • 客户端使用表单检索URL

  • 服务器编译jsp并生成html输出

  • 客户端看到空表单,不存在与服务器的连接,这是“浏览器世界”

  • 客户端提交表单,因此您将表单数据发布到服务器并保存cookie。此时,您无法从服务器运行java代码,它仍然是“浏览器世界”

  • 服务器接收请求并执行jsp/servlet/表单操作中映射的任何内容,这里您的客户机已经发送了表单数据

  • 服务器处理并发送响应

  • 在这里,客户端再次收到来自服务器的响应,并可以将服务器处理的内容保存到cookie中

  • 所以,在第4步中,您不能只在服务器端执行一些java加密,因为您要到第7步才能得到答案


    也许我们需要更具体的信息来了解您想要做什么…

    您到底想要实现什么?你的代码现在出了什么问题?代码本身没有加密cookie中的密码。我不确定如何通过Java方法将密码输入javascript。请从
    CommonUtils
    发布相关信息。操作是否到位或返回新字符串?这些方法只返回一个字符串,该字符串基本上是作为参数传递的字符串的加密版本:
    公共静态字符串xorEncode(字符串数据){…返回新字符串(encryptedString);}
    xorEncode和xorEncode方法是什么样子的?如果密钥被重用,那么XOR加密很容易被破坏。另外,XOR加密和解密应该是相同的操作。谢谢你的回答。我不确定提供的信息是否完全足够。我正在尝试为站点创建一个登录表单,以便登录表单将用户名和密码作为cookie记住。但是,我不希望密码以明文形式存储在cookie中。我也不希望加密方法是javascript方法,因为它可以很容易地被查看和黑客攻击。好的,所以您并不真正关心在通信通道中对密码进行加密(假设您将使用ssl(https))。如果是这种情况,在接收到用户/pwd后在服务器上生成加密cookie(步骤6),并在步骤7发送响应。因此,从技术上讲,您将在提交表单后一步保存cookie。可以这样想,这样您就知道只有在成功登录后才能存储cookie。在登录表单上,您可以验证是否存在cookie,如果存在cookie,则直接将其提交到服务器。