【问题标题】:Encrypt user password with jquery and decrypt it with C#使用 jquery 加密用户密码并使用 C# 解密
【发布时间】:2011-04-09 04:00:15
【问题描述】:
  • 我不想使用 SSL 来加密我正在构建的网站的注册表单和登录表单。
  • 我没钱买证书。
  • 我需要在我的 asp.net 网站中使用 jQuery 加密和 C# 解密。

有人有例子吗?采用这种方法有多安全?

【问题讨论】:

  • 根本不安全。下一个!
  • SSL 女巫是一个 安全套接层 永远不应与加密相比,它完全不同的是,SSL 保护数据女巫从一个实体传输到另一个实体,而加密保护正在读取的数据。
  • 大约50美元就可以从godaddy.com获得一个SSL证书。购买这样的证书比开发自己的加密要便宜得多。
  • @Svisstack,是的,我有点过分了,改变了。
  • SSL 确保数据的安全性和完整性。此外,发件人在证书颁发机构(例如 Verisign)的帮助下获得身份验证。

标签: c# jquery asp.net encryption


【解决方案1】:

如果您不使用 SSL,那么您就不安全,但这不是唯一的原因。

SSL 保护实际通信,而加密保护您正在通信的数据。您甚至根本不应该加密密码。您应该对信息进行强化散列hash 是单向函数(不能反转),而encryption 是双向函数(可以反转)。哈希强化和使用包括:

  • 迭代为速度而构建的哈希,例如 SHA512 几千次或使用类似 BCrypt 的东西。
  • 使用salt - 类似于每个用户的 64 位混杂数组,存储在数据库中就可以了
  • 使用应用层中的密钥加密数据库中的密钥和盐 - 这意味着如果您的数据库被占用,他们仍然需要来自应用层的密钥来访问原始哈希信息以及盐。

您必须记住,安全性是分层构建的。通过跳过 SSL,您将跳过其中的大部分内容。至少你可以使用makecertcreate a self-signed certificate。将会发生的只是用户将被警告。在GoDaddy 上,一个好的 SSL 证书只需 12.99 美元。我建议购买一个并实施上述内容。

【讨论】:

  • “如果可以访问该密钥信息,您就可以彻底告别安全性了。” 这仅适用于同步加密,不适用于异步加密。但是 JavaScript 中异步加密的性能很差。如果您使用 RSA 或任何其他公钥系统等异步加密,您可以发布您的加密密钥。您只需将解密密钥保密。
  • @jig - 删除了那个末端部分。无论如何,与答案的其余部分无关。
  • @jig - 呵呵,谢谢。无论如何,我应该更具体。
  • @jigfox 只是一个一点更正:我认为您应该将 synchronous / asynchronous 替换为 symmetric / 不对称在你的第一条评论中
  • @Giu,你说得对。对此很抱歉,但英语不是我的第一语言,所以有时我会犯错误。遗憾的是,现在编辑我的评论为时已晚。
【解决方案2】:

您可以在不支付证书的情况下进行 SSL,并且这种方法可以让您安全,仅浏览器获取有关您的证书的信息是不合格的。

阅读http://www.akadia.com/services/ssh_test_certificate.html

【讨论】:

    【解决方案3】:

    它可能根本不安全。 SSL 确实是要走的路;如果你买不起证书,你总是可以自己制作。显然,这些不会验证到受信任的根权限之一,但它们同样安全 - 您网站的身份不会由受信任的第三方确认,但连接本身将同样安全地加密。

    【讨论】:

      【解决方案4】:

      如果不使用 SSL,您会向网络嗅探攻击开放您的代码。在客户端加密也没有任何好处。

      很遗憾,如果没有获得有效证书,就没有安全的解决方法。这种方法是不安全的。

      【讨论】:

      • 自托管证书将同样安全,只要 DNS 不被黑客入侵。
      • @tdammers - 是的,但我假设 OP 想要这个面向公众的网站而不是自签名。
      • 是的,有烦人的浏览器安全警告......如果网站足够重要,可以像这样加密,那么任何想要它的人都应该为证书付费。
      【解决方案5】:

      我同意其他人的安全顾虑,如果您一心想要这样做,您可以尝试使用自定义 PKI 界面。您将不得不对完成此操作所需的代码进行更深入的研究,但这里有一个描述公钥结构的链接:

      Public Key Cryptography

      因此,如果您设法在 jquery 中编写了一个公钥 RSA 算法,那么您应该可以毫无困难地匹配其在 C# 中的私钥解密。这不是一个建议,因为这实际上只是“通过混淆实现的安全性”(这根本不是安全性)。

      【讨论】:

        【解决方案6】:

        您可以使用 Javascript 加密表单数据。这可以做到,见http://www.movable-type.co.uk/scripts/aes.html。如果数据使用密钥加密,那么您必须将该密钥存储在 javascript 代码和服务器端代码中。由于 javascript 代码将是客户端并且密钥将是公开的,因此这根本不安全 :)。这同样适用于非对称加密。不同的数据可以用相同的密钥加密并发送到服务器。

        SSL 旨在通过使用公钥密码学和对称加密技术来克服网络上的安全问题。防止中间人攻击。使用 SSL,您可以确保您的数据是安全的,不会通过这种方式进行更改,并且有一个第三方证书颁发机构,它表明您就是您声称的那个人。

        如果您说我可以将密钥或加密代码放在 applet 或 active-x 或 flash swf 对象中并使用混淆来保护代码,那可能是一种方法。但同样,这种方法容易受到攻击并且不安全。混淆并不能保证您的密钥或算法是安全的,只会加强破解者获取密钥的工作。

        希望对你有帮助。

        【讨论】:

          【解决方案7】:

          您可以使用HMAC 进行身份验证。这不会提供隐私,但嗅探器(查看当时网络流量的人)将无法获取密码,也无法冒充真实用户登录。当我不提供隐私时,我的意思是嗅探器将看到所有传输的内容,但看不到密码。

          SSL 当然是非常安全的,但对于许多应用程序来说是一种过度杀伤力。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-11
            • 1970-01-01
            • 1970-01-01
            • 2018-03-10
            相关资源
            最近更新 更多