Javascript 通过自定义加密对html表单数据进行加密

Javascript 通过自定义加密对html表单数据进行加密,javascript,jquery,html,html-encode,Javascript,Jquery,Html,Html Encode,我有一个html形式的登录信息,我想通过客户端的自定义规则进行加密。有没有办法做到这一点 <form action="/submit" method="post" name="form_pass_enc" id="form_pass_enc"> <label for="name">Name:</label> <input type="input" name="name" id="name" /> <br/> <la

我有一个html形式的登录信息,我想通过客户端的自定义规则进行加密。有没有办法做到这一点

<form action="/submit" method="post" name="form_pass_enc" id="form_pass_enc">
  <label for="name">Name:</label>
  <input type="input" name="name" id="name" />
  <br/>
  <label for="password">Password:</label>
  <input type="password" name="password" id="password" />
  <br/>
  <input type="button" name="form_submit" id="form_submit" value="Submit" />
</form>

姓名:

密码:

我没有找到合适的解决办法

客户端的每一次加密都不是一个好主意。因为它可以被看到和改变。
或者,如果您只是想匹配一些规则,比如电话规则,您可以尝试使用javascript中的一些RegExp,这些RegExp是围绕crypto.minute.encrypt/decrypt构建的加密/解密函数,下面是一个摘要解决方案

用于加密表单的函数:

async function encryptedSubmitForm(formName) {
    form = document.forms[formName];
    form_types = [];
    for (idx=0; idx < form.elements.length; idx += 1) {
        dtype = form.elements[idx].type
        form_types.push(dtype)
        form.elements[idx].type = "text"
        form.elements[idx].value = await encrypt(form.elements[idx].value, ekey());
        await sleep(8);
    }
    form.submit();
    for (idx=0; idx < form.elements.length; idx += 1) {
        await sleep(8);
        form.elements[idx].type = form_types[idx];
        form.elements[idx].value = await decrypt(form.elements[idx].value, ekey());
    }
}
安全问题猖獗,这假定是SSL,并且是服务器端加密之外的,而不是作为替代方案。可能发生跨源本地存储泄漏。使用完整性检查忽略或固定任何外部依赖项:

<script src="https://cdnjs.cloudflare.com/ajax/libs/bitcoinjs-lib/0.2.0-1/bitcoinjs-min.js" integrity="sha256-FilB5ir32toR4c80H4e31Wzh7MbA0kOd/LzvRxgletA=" crossorigin="anonymous"></script>


encrypt的含义一点也不清楚。在发送数据时?通过自定义规则对给定数据进行加密是一个巨大的安全漏洞,它会使加密变得毫无意义。除非您是一名经验丰富的加密专业人员,并且您使用的系统已经过其他经验丰富的加密专业人员的广泛测试,否则不要这样做。如果您不使用https(它会自动为您完成),请注意客户端的加密将公开您的加密方法的所有细节,因为代码是可见的,所以您可以通过编写JavaScript对数据进行加密,从而在客户端对数据进行加密。但是请注意,用户仍然可以看到未加密的数据和加密数据的代码。所以你没有真正完成任何事情。你想解决什么实际问题?几乎在任何情况下,试图创建自己的安全性而不是使用行业标准都是一个糟糕的想法;当您的网站和其中的数据在客户端之间传输时,会对其进行加密。
<td class="encrypted">{{prow.datebin}}</td>
...
<script>
    decryptElements();
</script>
async function decryptElements() {
    cts = document.getElementsByClassName("encrypted");
    for (ct of cts) {
        await sleep(16)
        ct.textContent = await decrypt(ct.textContent, ekey());
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/bitcoinjs-lib/0.2.0-1/bitcoinjs-min.js" integrity="sha256-FilB5ir32toR4c80H4e31Wzh7MbA0kOd/LzvRxgletA=" crossorigin="anonymous"></script>