繁体   English   中英

使用C#加密使用jQuery和Decrypt

[英]Encrypt using jQuery and Decrypt using C#

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

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

ASPX文件

<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();"/>

EncryptData()

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

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

C#

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            int key = new Random().Next();
            ServerKey = key;
            ClientKey.Value = key.ToString();
        }
    }
protected void OnClick(object sender, EventArgs e)
    {
        // Decrypt(txtData.Text, ServerKey.ToString()));
    }

更新1

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

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

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

这里的问题是邮局或任何其他可以访问包裹的人都可以打开保险箱。 在这个比喻中,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,因为它可以提供一些保护,即使通信的一侧只有通过身份验证。 这是通过Internet进行HTTP事务的情况,通常只对服务器进行身份验证(由客户端检查服务器的证书)。

有人可能会说https 也可以被破解 ,但它仍然是发送敏感数据的更好选择。

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

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

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

  1. 用户名
  2. 密码
  3. 在注册期间已经存储在服务器端的预先录制的问题的答案

提交。

  1. 通过回答预先录制的问题来加密密码。
  2. 当在服务器端接收到密码时,解密密码,并回答存储在服务器端(数据库)中的预先记录的问题。
  3. 如果密码匹配允许或以其他方式拒绝服务。

这样,任何拦截您登录服务器端的请求的人都没有密钥可以解密。 正如smoksnes所提到的那样,使用https来提高安全性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM