使用C#加密使用jQuery和Decrypt

时间:2016-08-17 08:27:42

标签: javascript c# asp.net security encryption

我喜欢实现mechanisam,其中Cliend Browser上的字符串在页面发布到服务器之前使用密钥加密,然后我可以使用服务器端C#代码使用相同的密钥解密该发布的字符串。

我使用Random类在每个页面请求上生成唯一键。

ASPX文件

/I(\s[a-zA-Z]*\s?){0,5}(TV|chocolate|fire)/

EncryptData()

<asp:TextBox runat="server" ID="txtData" ClientIDMode="Static"></asp:TextBox>
    <asp:HiddenField runat="server" ID="ClientKey" ClientIDMode="Static"/>
    <asp:Button runat="server" Text="Submit" OnClick="OnClick" OnClientClick="return EncryptData();"/>

C#

function EncryptData() {
        var plaintext = $('#txtData').val();
        var secret = $('#ClientKey').val();
        var encrypted;// Encrypt(plaintext, secret);

        $('#txtData').val(encrypted);
        return true;
    }

更新1

我在HDFC银行登录页面上看到过相同的机制,他们首先加密用户的密码,然后发布表格。

2 个答案:

答案 0 :(得分:0)

我会重新考虑你在做什么的用法。您正在使用密钥加密某些内容,然后将该内容与密钥一起发送到服务器。当然,阅读价值会更难,它可能会吓到一些低级嗅探器,但它并不安全。它是security by obscurity

这样想。爱丽丝想要给鲍勃发送一份情书,但爱丽丝不想要鲍勃以外的其他人阅读情书,所以她把它放在保险箱里。考虑到情书安全,她将邮件邮寄给鲍勃。但她记得鲍勃无法打开保险箱,所以在相同的包装中,她也把钥匙放在保险箱上

这里的问题是邮局或任何其他可以访问包裹的人都可以打开保险箱。在这个比喻中,Alice是客户端(网络浏览器,javascript),互联网线是邮局,服务器是Bob。

有一些方法可以使用javascript加密它。如:

http://point-at-infinity.org/jsaes/

https://code.google.com/archive/p/crypto-js/

如果您仍然希望加密客户端上的数据,这样做没有坏处,我会避免将请求中的密钥发送回服务器。它应该足以让服务器将其发送到客户端。然后客户不应该将其发回。相反,您可以在服务器端存储会话。通过这种方式,您至少可以使中间人的威胁变得更小。

但在这种情况下,我会使用https代替发送数据。

  

HTTPS统一资源标识符(URI)方案具有相同的名称   标准HTTP方案的语法,除了它的方案标记。   但是,HTTPS表示浏览器使用添加的加密层   SSL / TLS保护流量。 SSL / TLS特别适用于HTTP   因为它可以提供一些保护,即使只有一面   通信已通过身份验证。这是HTTP的情况   Internet上的事务,通常只有服务器   经过身份验证(由客户端检查服务器的证书)。

有人可能认为https can be cracked as well,但它仍然是发送敏感数据的更好选择。

答案 1 :(得分:0)

经过一番思考,这是我建议你可以做的。让其他人了解他们的想法。

创建一个额外的密钥。密码短语(可能是问答类型,母亲姓名或宠物名称等),并将其用作加密或解密的密钥。

因此,在记录用户时将输入

  1. 用户名
  2. 密码
  3. 预先存储的问题的答案,存储在 服务器端已在注册期间
  4. 提交。

    1. 加密密码并回答预先录制的问题。
    2. 当在服务器端接收到密码时,解密密码并回答存储在服务器端(数据库)中的预先记录的问题。
    3. 如果密码匹配允许或以其他方式拒绝服务。
    4. 这样,任何拦截您登录服务器端的请求的人都没有密钥可以解密。正如smoksnes所提到的,使用https来提高安全性