我正在使用包含user
和password
字段的表单,我需要在将表单发送到服务器进行验证之前加密密码。为此,我使用md5.js
在客户端使用salt信息进行加密。
test.php
<script LANGUAGE="Javascript" SRC="js/md5.js"></script>
<script>
function encryptPwd1(strPwd, strSalt, strit) {
var strNewSalt = new String(strSalt);
if (strPwd == "" || strSalt == "")
{
return null;
}
var strEncPwd;
var strPwdHash = MD5(strPwd);
var strMerged = strNewSalt + strPwdHash;
var strMerged1 = MD5(strMerged);
return strMerged1;
}
function validateForm(strSalt, strit) {
var strEncPwd = new String(encryptPwd1(document.getElementById("password").value, strSalt, strit));
document.getElementById("password").value = strEncPwd;
document.login.submit();
return true;
}
</script>
<form method="post" action="test1.php">
<input type="hidden"
name="salt"
id="salt"
value="8qadr4xnCPW275BaNpYX">
<label class="login">Password:</label>
<input
name="password"
id="password"
type="password" />
<input type="submit"
name="gos"
id="gos"
value="Login"
onClick="return validateForm('8qadr4xnCPW275BaNpYX','38');">
</form>
这是包含使用JavaScript和md5.js
的客户端加密的表单。我可以成功加密邮件并将其发送到test1.php
中的test1.php
。我不知道如何解密文本请帮助我。
答案 0 :(得分:3)
在这里等一下。
这只是一个坏主意(我可以在这里考虑其他形容词,但会将自己局限于BAD)。
任何人都可以使用任何浏览器阅读您的页面源代码,所以如果我这样做,我会看到什么......
为什么不直接向我提供您的银行帐号和PIN码,以及衡量房屋和汽车的钥匙呢!
我认为你没有船或你现在已经淹死了!
不要尝试在浏览器中执行此操作,唯一安全的方法是使用SSL。
答案 1 :(得分:2)
您希望保护纯文本密码免受正在侦听网络流量的“ man in the middle ”的影响。不幸的是,使用客户端java脚本无法阻止这种情况,因为攻击者也可以看到发送的java脚本,并且还可以从请求中删除此脚本。
保护密码传输的唯一可靠方法是使用带SSL加密的HTTPS。这也是有效的,因为已经共享了一个秘密(浏览器中安装了证书)。
客户端哈希也可以实现它的目的,但永远不会取代服务器端哈希。您可以将用于散列的CPU电源传输到客户端。在服务器端,您将不得不再次哈希,但轮次更少。
答案 2 :(得分:1)
密码加密是必需的,因为密码跟踪将在您提交时存储在计算机的浏览器内存中。如果黑客通过广泛使用的工具访问您的计算机,您的存储数据将被暴露。
对此的补救措施是让黑客更难获取密码......
要记住两件事: 1)通过表格提交 2)通过ajax提交
在这两种情况下,控制提交的字符编码并确保服务器字符编码与应用程序网页同步非常重要。
如果您不控制编码,那么您的ajax调用最终可能会使用不同于您通过表单提交的编码集,因此您的解码将不容易。
一旦你掌握了它们,就可以使用任何想要解码的语言代码...... 但是,您需要在服务器端保留salt和stringit的引用..并且您需要在为用户提供的每个页面上随机生成不同的字符串集。
这样做的一种方法是将它们作为隐藏输入包含在表单中。但是您需要在允许表单继续提交之前立即从表单中删除输入。