首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.Net -使用login控件时如何在登录前加密密码

问ASP.Net -使用login控件时如何在登录前加密密码
EN

Stack Overflow用户
提问于 2011-05-14 10:09:48
回答 3查看 21.8K关注 0票数 3

我使用ASP.Net登录控件登录web应用程序。当用户提交表单时,我希望在ASP.Net发送用于身份验证的信息之前调用一个函数来加密密码。

我试图在密码字段中添加一个Customer,如果密码不是空的,Password.Text将被加密的值替换。但是,ASP.Net似乎仍然发送原始密码进行身份验证。

我还尝试在登录按钮上添加一个onClick事件来加密密码,但是ASP.Net仍然发送原始密码进行身份验证。

有办法这样做吗?谢谢!

更新:

很抱歉我没说清楚。我需要的是在服务器端加密密码。

在注册用户时,我不会使用ASP.Net成员身份加密或散列密码。passwordFormat属性已设置为“清除”。

我所做的是:

  1. 在新用户注册时,我使用自定义的函数加密密码并将其保存到数据库中。当用户尝试登录时,希望使用相同的函数加密用户输入的密码,并让ASP.Net对用户进行身份验证。

我遇到的问题是,在ASP.Net启动身份验证过程之前,我无法找到调用加密函数的方法。

希望这是有意义的。谢谢。

艾伦

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-14 10:27:54

添加OnClick事件绝对是正确的。如果您尝试执行加密客户端,那么您将需要使用OnClientClick事件(OnClick发生在服务器端,OnClientClick发生在客户端)。我最初假设您使用它来调用客户端javascript函数来进行加密?

编辑

但是,如果您正在执行加密服务器端的操作,并使用Login控件,则可能需要使用OnAuthenticate事件:

代码语言:javascript
复制
<asp:Login id="Login1" runat="server" OnAuthenticate="OnAuthenticate">
</asp:Login>

那么在这里做你的加密:

代码语言:javascript
复制
private void OnAuthenticate(object sender, AuthenticateEventArgs e) {
    bool authenticated = false;
    String encryptedPassword = Encrypt(Login1.Password);
    authenticated = YourAuthenticationMethod(Login1.UserName, encryptedPassword );

    e.Authenticated = authenticated;
}
private bool YourAuthenticationMethod(String username, String encryptedPassword) {
    //test the encrypted password against that retrieved from your database using the username
}
票数 1
EN

Stack Overflow用户

发布于 2011-05-14 10:28:53

为什么要在将密码客户端发送到服务器之前对其进行加密?这并不比向服务器发送普通密码更安全。您为加密此密码而编写的代码任何人都可以查看。

在服务器上,您应该使用如下内容:

代码语言:javascript
复制
public static string createPasswordHash(string pwd)
    {
        return FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");
    }
票数 1
EN

Stack Overflow用户

发布于 2012-02-29 00:24:14

如果我误解了ASP.NET技术,很抱歉,但是它应该提供服务器端应用程序。因此,您不应该能够使用任何"c#代码“加密传输密码。如果您不能使用安全HTTP (如果可以的话,您将不需要加密密码,因为所有通信都将被加密),JavaScript是“唯一的方法”。但是,如果您的项目包含客户端应用程序(在客户端计算机上真正安装(或运行)的应用程序),当然可以使用完全的c#潜力。

有一个讨论,为什么你会需要它在所有。由于我没有看到更好的解释,我将尝试提供我自己的:通过互联网传输的密码加密是必不可少的,如果您期望有人会监听客户端计算机和服务器之间的通信。据我所知,如果用户在您的站点上单击登录按钮,他看到的表单页面实际上是在他的计算机中下载的,而单击只会导致数据从客户端传输到服务器。这些数据根本没有加密,任何邪恶的夏娃都可以监听传输,获得客户的纯文本密码。

但是您应该知道,即使发送加密密码,加密也只涉及纯文本密码问题。如果您的服务器端应用程序希望使用静态算法加密密码,而我唯一的目标(就像邪恶夏娃一样)是成功地登录到系统中,我实际上不需要知道密码本身,它的加密形式就足够好了。这是一个相当复杂的问题,它取决于您的连接真正需要多大的安全性--如果成本(或您的努力)与风险相关。如果你真的认真对待尽可能最好的安全性,你应该通过一些安全标准。

看到用JavaScript编写的算法对于它的良好实现来说是无关紧要的(RSA是开放的,而且易于访问,虽然足够安全)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6001127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档