使用jQuery加密用户密码并使用C#解密

6
  • 我不想在我正在建立的网站上使用SSL来加密注册和登录表单。
  • 我没有钱支付证书费用。
  • 我需要在我的asp.net网站中使用jQuery进行加密,使用C#进行解密。

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


17
完全不安全。下一个! - leppie
3
SSL,即安全套接字层,不应与加密进行比较,它们是完全不同的。SSL保护从一个实体传输到另一个实体的数据,而加密则保护数据免遭阅读。 - RobertPitt
1
你可以在godaddy.com购买价值约50美元的SSL证书。购买这样的证书比自行开发加密功能便宜得多。 - Raffael Luthiger
@Svisstack,是的,我有点过早行动了,已经改了。 - RobertPitt
SSL 确保数据的安全性和完整性。同时,发送者通过证书颁发机构(如 Verisign)获得身份验证。 - Zafer
不要缩进你的问题 - 编辑器会将其视为“代码”。 - alex
7个回答

15

如果您没有使用SSL,则不安全,但这并不是唯一的原因。

SSL保护实际通信,而加密则保护你所传输的数据。你甚至不应该对密码进行加密。你应该对信息进行硬化哈希处理。hash是一个单向函数(不能被反转),而encryption是双向函数(可以被反转)。哈希硬化和使用包括:

  • 迭代速度较快的哈希表,例如使用 SHA512 几千次或使用类似于 BCrypt 的东西。
  • 使用 salt - 每个用户都有一个64位的混合数组,存储在数据库中即可。
  • 使用应用程序层中的密钥对数据库中的密钥和盐进行加密 - 这意味着如果您的数据库被攻击,攻击者仍需要从应用程序层获取密钥才能访问原始哈希信息以及盐。

你必须记住,安全性是逐层构建的。如果跳过SSL,你就跳过了其中很大一部分。至少你可以使用makecert创建自签名证书。所有会发生的事情就是用户会收到警告。一个好的SSL证书在GoDaddy上可能只需花费$12.99。我建议你除了实施上述措施外,还应该获取一个好的SSL证书。


3
如果可以访问到那个关键信息,你的安全就会完全被破解。这只适用于同步加密,而不是异步加密。但在JavaScript中,异步加密的性能很差。如果您使用RSA或任何其他公钥系统等异步加密方式,您可以发布加密密钥。您只需保密解密密钥即可。 - jigfox
@jig - 我已删除了最后一部分。无论如何,它与答案的其余部分不太相关。 - Kyle Rosendo
@jig - 嘿嘿,谢谢。无论如何,我应该更具体一些。 - Kyle Rosendo
@jigfox 只是一个修正:我认为你应该在你的第一条评论中将synchronous / asynchronous 替换为symmetric / asymmetric - Giuseppe Accaputo
@Giu,你说得完全正确。很抱歉,我的母语不是英语,所以有时会犯错误。可惜,现在已经太晚了,无法编辑我的评论。 - jigfox
@jigfox,这完全不是问题;我知道你没有故意写错,因为你评论的其余部分在内容上完全正确。而且你的英语也很好,所以绝对不用担心 :) - Giuseppe Accaputo

6

3

这可能根本不安全。SSL确实是正确的选择;如果您买不起证书,您总可以自己制作一个。显然,这些证书不会被一个受信任的根机构验证,但它们同样安全——您的网站身份将不会被受信任的第三方确认,但连接本身将被同样安全地加密。


0

如果不使用SSL,您就会将代码暴露给网络嗅探攻击。在客户端加密也没有任何好处。

不幸的是,没有安全的方法可以规避此问题,除非获取有效证书。其他方法是不安全的。


1
只要 DNS 没有被黑客攻击,自托管证书就同样安全。 - tdammers
@tdammers - 确实,但我假设 OP 想要这个用于公共网站而不是自签名。 - Ryan Peters
是的,有令人烦恼的浏览器安全警告... 如果网站足够重要需要加密,那么想要它的人应该付费购买证书吧。 - tdammers

0

我同意其他人的安全顾虑,如果你非常坚定地要这样做,你可以尝试使用自定义PKI接口。你需要更深入地研究所需的代码,但这里有一个链接描述了公钥结构:

公钥密码学

因此,如果你能够在jquery中编写公钥RSA算法,你应该能够轻松匹配C#中的私钥解密。这并不是一种建议,因为这只是“通过混淆实现安全”(根本不是安全)。


0

你可以使用Javascript加密表单数据。这是可行的,可以参考http://www.movable-type.co.uk/scripts/aes.html。如果使用密钥加密数据,则需要将该密钥存储在Javascript代码和服务器端代码中。由于Javascript代码将在客户端运行且密钥是公开的,所以这并不安全 : )。对于非对称加密也是同样有效的。不同的数据可以用相同的密钥加密并发送到服务器。

SSL是为解决网络安全问题而设计的,使用了公钥密码学和对称加密技术。它可以防止中间人攻击。使用SSL,您可以确保您的数据安全,不会被篡改,并且有第三方证书机构证明您是所声称的人。

如果你说我可以将密钥或加密代码放在小程序、ActiveX或Flash SWF对象中,并使用混淆来保护代码,那可能是一种方法。但是这种方法仍然容易受到攻击,不安全。混淆并不能保证您的密钥或算法是安全的,只能增加破解者获取密钥的难度。

希望对您有所帮助。


0

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

SSL当然非常安全,但对于许多应用程序来说可能过于复杂。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接