我可以理解,对密码施加最小长度非常有意义(为了节省用户),但我的银行要求密码长度在6到8个字符之间,我开始想知道......
如果某人(希望)有一些优秀的IT安全专业人员为他们工作,那么我是否应该考虑做类似的事情?这有什么优点/缺点?
我查询了msdn和其他资源如何做到这一点,但我想出了没有明确的解决方案.这是我找到的最好的http://blogs.msdn.com/b/shawnfa/archive/2004/04/14/generating-a-key-from-a-password.aspx?Redirected=true
我想使用bcrypt或PBKDF2(看起来与bcrypt相关)在C#中散列密码.我想试验一下我的计算机散列密码需要多少轮.然而,一切似乎都是关于加密,而每个人都谈论哈希.我无法弄清楚.我如何哈希密码?它看起来更像PBKDF2(Rfc2898?)是一个随机数生成器,我使用GetBytes(金额)来选择我的散列大小有多大.
我糊涂了.我究竟如何用bcrypt/PBKDF哈希密码?
新的ASP.net Identity项目为网站安全带来了一些有用的代码和接口.要使用接口实现自定义系统(而不是使用MVC 5模板中包含的标准Entity Framework实现),IPasswordHasher
则需要使用.
IPasswordHasher
ASP.net身份中的接口namespace Microsoft.AspNet.Identity
{
public interface IPasswordHasher
{
string HashPassword(string password);
PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword);
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用密码salting在ASP.net身份中通过此接口进行更安全的加密?
我试图创建在ASP.Net成员资格系统默认的SHA-1密码哈希的纯T-SQL表示.理想情况下,我会得到的是:
UserName Password GeneratedPassword
cbehrens 34098kw4D+FKJ== 34098kw4D+FKJ==
Run Code Online (Sandbox Code Playgroud)
注意:那里有伪造的base-64文本.我有base64_encode和解码函数正确往返.这是我的尝试,但不起作用:
SELECT UserName, Password, dbo.base64_encode(HASHBYTES('SHA1', dbo.base64_decode(PasswordSalt) + 'test')) As TestPassword FROM aspnet_Users U JOIN aspnet_membership M ON U.UserID = M.UserID
Run Code Online (Sandbox Code Playgroud)
我尝试了很多关于主题的变化,但没有用.我需要在纯T-Sql中执行此操作; 涉及控制台应用程序或类似的东西将使工作翻倍.
因此,如果有人能提供从ASP.Net会员资料中复制该密码的语法应该是什么,我将非常感激.
尝试在新的asp.net mvc 5中实现IPasswordStore,我有点沮丧.我想使用自己的ORM.
从示例项目中使用'register'屏幕时运行的脚手架'AccountController'中获取这个熟悉的代码片段.
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.UserName };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
该
var result = await UserManager.CreateAysnc(user, model.Password)
Run Code Online (Sandbox Code Playgroud)
line首先调用IPasswordStore函数
public Task SetPasswordHashAsync(TUser user, string passwordHash)
Run Code Online (Sandbox Code Playgroud)
没有先从IUserStore调用
public Task CreateAsync(TUser user)
Run Code Online (Sandbox Code Playgroud)
如果尚未在db中创建用户,如何设置密码哈希?此外,我们实际上甚至不知道我们是否可以创建提议的"用户",因为我们还没有检查是否已使用用户名
public Task<TUser> …
Run Code Online (Sandbox Code Playgroud) 我有一个项目,我们需要将许多用纯文本密码的用户迁移到一个新的数据库中,我们将对密码进行哈希处理.
新系统使用Entity Framework,需要使用Asp.Net Identity框架进行身份验证.
我发现我可以在C#中生成一个正确的哈希密码,Entity Framework可以毫无问题地读取该密码.
public static string HashPassword(string password)
{
byte[] salt;
byte[] buffer2;
using (var bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))
{
salt = bytes.Salt;
buffer2 = bytes.GetBytes(0x20);
}
byte[] dst = new byte[0x31];
Buffer.BlockCopy(salt, 0, dst, 1, 0x10);
Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);
return Convert.ToBase64String(dst);
}
Run Code Online (Sandbox Code Playgroud)
SQL中是否有类似的东西我可以在INSERT语句中使用SELECT到另一个表?
我的应用程序的所有身份验证和授权过程都是使用存储过程完成的.我已经写了所有我需要的功能,例如一类GetUsers
,Login
,AddRole
,AddMember
等,也用于管理用户和角色和权限管理页面,通过使用这个类来完成.
我只需要添加authentication
(我的意思是该authorize
属性),用于登录和注销的cookie以及为每个登录存储一些服务器端数据.我想我需要为此实施Identity
?
在这种情况下,你能指导我实施吗?看来你需要做的最基本的事情就是实现一个create
将实例传递IUserStore
给构造函数的方法.但我不需要为用户或角色提供任何表,我该如何实现此方法?
这是当前的类,如果您需要查看使用存储过程的自定义身份验证类,请告诉我.
public class AppUserManager : UserManager<AppUser>
{
public AppUserManager(IUserStore<AppUser> store) : base(store) { }
public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{
//AppUserManager manager = new AppUserManager();
//return manager;
return null;
}
}
Run Code Online (Sandbox Code Playgroud) 密码历史记录有默认实现吗?我正在尝试在我的项目中使用身份来实现该功能,因此我添加了包含密码哈希值的密码历史表。当用户更改密码时,usermanager 会生成密码的哈希值。
var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
如果此哈希未插入密码历史表中,则允许更改密码,否则返回错误
但问题是每次为特定密码生成哈希值时,它都会生成随机哈希值,这些随机哈希值也无法比较
var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
哈希值不同于
_userManager.ResetPasswordAsync(user, request.Token, password);
生成的密码哈希。
可能是我试图以错误的方式做到这一点。我在实现密码历史记录时犯了什么错误?
谢谢
我对 ASP.NET Identity 和 EntityFramework 有一个非常奇怪的问题。我有一个登录表单,从中我收到用户名和密码。然后我检查数据库中是否存在该用户。之后,我调用 UserManager 的方法VerifyHashedPassword 来验证数据库中的用户密码和表单中的用户密码是否相同。一切都很好,但是对于数据库中的某些用户,该方法给出的结果是给定的密码和散列密码不相同(但实际上是相同的)。我只是不明白为什么某些用户的密码验证失败。
这是我的代码。
public async Task<User> FindUserAsync(string userName, string password)
{
User user;
if (password != null)
{
user = await _userManager.FindByNameAsync(userName);
if (user == null)
{
user = await _userManager.FindByEmailAsync(userName);
}
var result = _userManager.PasswordHasher.VerifyHashedPassword(user.PasswordHash, password);
if (!(result == PasswordVerificationResult.Success))
{
return null;
}
}
return user;
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个使用 dotnet core API 和身份核心进行用户管理的应用程序。我正在调查我的数据库,当我看到该字段中的所有字符串都PasswordHash
以相同的字符开头时感到惊慌:AQAAAAEAACcQAAAAE
,因为我认为加盐无法正常工作。我现在意识到加盐确实可以正常工作,因为密码散列的其余部分随每个密码而变化,但现在我对这个神秘的前缀感到好奇。
这个密码哈希前缀在身份核心中有何用途?
asp.net ×3
c# ×3
hash ×3
.net ×2
passwords ×2
security ×2
.net-core ×1
asp.net-core ×1
asp.net-mvc ×1
bcrypt ×1
encryption ×1
identity ×1
sql ×1
t-sql ×1