我使用ASP.Net登录控件登录web应用程序。当用户提交表单时,我希望在ASP.Net发送用于身份验证的信息之前调用一个函数来加密密码。
我试图在密码字段中添加一个Customer,如果密码不是空的,Password.Text将被加密的值替换。但是,ASP.Net似乎仍然发送原始密码进行身份验证。
我还尝试在登录按钮上添加一个onClick事件来加密密码,但是ASP.Net仍然发送原始密码进行身份验证。
有办法这样做吗?谢谢!
更新:
很抱歉我没说清楚。我需要的是在服务器端加密密码。
在注册用户时,我不会使用ASP.Net成员身份加密或散列密码。passwordFormat属性已设置为“清除”。
我所做的是:
我遇到的问题是,在ASP.Net启动身份验证过程之前,我无法找到调用加密函数的方法。
希望这是有意义的。谢谢。
艾伦
发布于 2011-05-14 10:27:54
添加OnClick事件绝对是正确的。如果您尝试执行加密客户端,那么您将需要使用OnClientClick事件(OnClick发生在服务器端,OnClientClick发生在客户端)。我最初假设您使用它来调用客户端javascript函数来进行加密?
编辑
但是,如果您正在执行加密服务器端的操作,并使用Login控件,则可能需要使用OnAuthenticate事件:
<asp:Login id="Login1" runat="server" OnAuthenticate="OnAuthenticate">
</asp:Login>那么在这里做你的加密:
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
}发布于 2011-05-14 10:28:53
为什么要在将密码客户端发送到服务器之前对其进行加密?这并不比向服务器发送普通密码更安全。您为加密此密码而编写的代码任何人都可以查看。
在服务器上,您应该使用如下内容:
public static string createPasswordHash(string pwd)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");
}发布于 2012-02-29 00:24:14
如果我误解了ASP.NET技术,很抱歉,但是它应该提供服务器端应用程序。因此,您不应该能够使用任何"c#代码“加密传输密码。如果您不能使用安全HTTP (如果可以的话,您将不需要加密密码,因为所有通信都将被加密),JavaScript是“唯一的方法”。但是,如果您的项目包含客户端应用程序(在客户端计算机上真正安装(或运行)的应用程序),当然可以使用完全的c#潜力。
有一个讨论,为什么你会需要它在所有。由于我没有看到更好的解释,我将尝试提供我自己的:通过互联网传输的密码加密是必不可少的,如果您期望有人会监听客户端计算机和服务器之间的通信。据我所知,如果用户在您的站点上单击登录按钮,他看到的表单页面实际上是在他的计算机中下载的,而单击只会导致数据从客户端传输到服务器。这些数据根本没有加密,任何邪恶的夏娃都可以监听传输,获得客户的纯文本密码。
但是您应该知道,即使发送加密密码,加密也只涉及纯文本密码问题。如果您的服务器端应用程序希望使用静态算法加密密码,而我唯一的目标(就像邪恶夏娃一样)是成功地登录到系统中,我实际上不需要知道密码本身,它的加密形式就足够好了。这是一个相当复杂的问题,它取决于您的连接真正需要多大的安全性--如果成本(或您的努力)与风险相关。如果你真的认真对待尽可能最好的安全性,你应该通过一些安全标准。
看到用JavaScript编写的算法对于它的良好实现来说是无关紧要的(RSA是开放的,而且易于访问,虽然足够安全)。
https://stackoverflow.com/questions/6001127
复制相似问题