0

在通过 HTTP GET/POST 发送之前,我需要在客户端对用户名/密码进行加扰。在对数据库进行检查之前,服务器将使用 Tcl 对其进行解码。

目前我正在考虑将 JavaScript 用于客户端。Java Applet 也可以。

有什么方法可以让我使用 Simple XOR 或任何其他方法轻松实现它?(示例将不胜感激)

我在 C/Python/.NET/Java 中找到了一些示例……但在 JavaScript 和 Tcl 中没有。

遗憾的是,SSL 不是一个可以使用的选项。

4

2 回答 2

1

如果 ssl 不是一个选项,那么我建议使用以下方案,许多站点使用它来代替 SSL:

  1. 在客户端,结合用户名和密码,然后从中计算哈希(MD5 是一种流行的选择)。
  2. 将用户名和哈希发送到服务器
  3. 在服务器端,从数据库中检索该用户的密码。
  4. 从用户名和密码,计算哈希并与客户端的哈希进行比较。如果两者匹配,则密码匹配。
  5. 为了增加安全性,请在用户+密码组合中添加一些随机文本。这个随机文本,又名“盐”,必须在客户端和服务器端都知道。

以下是关于如何使用 MD5 计算哈希的建议:

package require md5

proc calculateHash {user password salt} {
    return md5:md5 -hex "$user:$salt:$password"
}

如何使用它:

set user "johnny"
set password "begood2mama"
set salt "myDog_is_meaner_than_yourDog"

set hash [calculateHash $user $password $salt]
于 2010-08-10T14:11:59.827 回答
1

超人,

您应该考虑在数据库中存储纯文本密码的替代方法。看:

与其在 Javascript 中对密码进行编码,然后在 Tcl 中对密码进行解码以与数据库进行比较,不如考虑在 Javascript 中进行 SHA1 散列,并将 SHA1 散列值存储在数据库中。

在 javascript 中有几个可用的 SHA1 哈希函数示例(只是 Google 'sha1 javascript')。tcllib Tcl 库支持 SHA1。

正如 HaiVu 所提到的,您还应该考虑散列/存储不仅仅是直接的密码散列,而是使用 SHA1(用户名 + 网站名称 + 密码)之类的东西。您可以在客户端用 Javascript 计算它,并将其存储在数据库中。

于 2010-09-10T03:30:18.027 回答