我喜欢实现一种机制,其中客户端浏览器上的字符串在页面发布到服务器之前使用 key 进行加密,然后我可以使用服务器端 C# 代码使用相同的 key 解密发布的字符串。
我使用 Random 类在每个页面请求上生成唯一 key 。
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();"/>
加密数据()
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 银行登录页面上看到了相同的机制,他们首先加密用户的密码,然后发布表单。
最佳答案
经过一番思考,我建议您可以这样做。让我们也谈谈其他人的想法。
创建一个附加 key 。密码(可能是问答之类的东西,母亲的名字或宠物的名字等)并将其用作加密或解密的 key 。
因此在登录时用户将输入
- 用户名
- 密码
- 预先录制的问题答案,存储在 服务器端已在注册期间
提交时。
- 使用预先录制的问题的答案对密码进行加密。
- 当服务器端收到密码时,将使用存储在服务器端(数据库)中的预先录制问题的答案来解密密码。
- 如果密码匹配允许或拒绝服务。
这样任何拦截您登录服务器端请求的人都将无法获得解密 key 。正如 smoksnes 所提到的,使用 https 来提高安全性
关于javascript - 使用 jQuery 加密并使用 C# 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38991646/