Tôi làm cách nào để sử dụng Membership.GeneratePassword để trả lại mật khẩu CHỈ chứa các ký tự chữ hoặc số? Phương thức mặc định sẽ chỉ đảm bảo tối thiểu và không phải là số lượng tối đa các mật khẩu không phải là chữ và số.Thành viên Tạo mật khẩu chỉ có mật khẩu chữ và số?
Trả lời
string newPassword = Membership.GeneratePassword(15, 0);
newPassword = Regex.Replace(newPassword, @"[^a-zA-Z0-9]", m => "9");
biểu thức chính quy này sẽ thay thế tất cả các ký tự không phải chữ và số với nhân vật số 9.
Điều này sẽ mất khá nhiều ngẫu nhiên trong mật khẩu của bạn. Không được khuyến khích. –
@Matti Có thể thay thế "9" bằng số nguyên Random.Next (0, 9). Việc đặt các ký tự không phải chữ và số vào mật khẩu điển hình thường quá mức cần thiết. Mật khẩu được tạo ngẫu nhiên không sử dụng các từ là tốt cho nhiều ứng dụng. Lý do để làm điều này là khả năng sử dụng. Nhiều ký tự không phải chữ và số có thể dễ dàng bị nhầm lẫn hoặc nhầm lẫn hoặc không thể được người dùng trung bình nhập vào. –
@Matti Cũng có thể với mã này sau đó quay lại và chỉ chèn một tập hợp con các ký tự không phải chữ và số được chấp thuận. Tôi không thấy cần cho bất kỳ ứng dụng nào. –
Một cách đơn giản để có được một 8 ký tự mật khẩu chữ và số sẽ được tạo ra một guid và sử dụng làm cơ sở:
string newPwd = Guid.NewGuid().ToString().Substring(0, 8);
Nếu bạn cần một mật khẩu dài hơn, chỉ cần bỏ qua các dấu gạch ngang bằng chuỗi con:
string newPwd = Guid.NewGuid().ToString().Substring(0, 11);
newPwd = newPwd.Substring(0, 8) + newPwd.Substring(9, 2); // to skip the dash.
Nếu bạn muốn đảm bảo ký tự đầu tiên là alpha, bạn chỉ có thể thay thế nó khi cần bằng chuỗi cố định nếu (newPwd [0]> = '0' & & newPwd [0] < = '9') .. .
Tôi hy vọng ai đó có thể thấy điều này hữu ích. :-)
Đây không phải là một ý tưởng tốt. Đối với một, bạn đang giảm tập hợp các ký tự có thể thành 16 (thay vì 36); khác, guids không nhất thiết phải ngẫu nhiên, và tùy thuộc vào phương pháp sử dụng để tạo ra các guid các mật khẩu mà bạn đang tạo ra có thể dễ dàng dự đoán được. Tôi đánh giá cao loạt bài viết của Eric Lippert về cách thức hoạt động của guids để biết thêm thông tin về điều này: http://blogs.msdn.com/b/ericlippert/archive/2012/04/24/guid-guide-part-one.aspx –
Tôi cũng thích phương pháp GUID - đây là phiên bản ngắn:
string password = Guid.NewGuid().ToString("N").Substring(0, 8);
Hiệu quả câu trả lời chính xác giống như của Laura, với định dạng chuỗi được chỉ định không có lý do gì (có hiệu lực bằng không). –
tôi nhận ra rằng có thể có nhiều cách để làm điều này. Phương pháp GUID là tuyệt vời, ngoại trừ nó không trộn UPPER và bảng chữ cái chữ thường. Trong trường hợp của tôi nó chỉ tạo ra trường hợp thấp hơn.
Vì vậy, tôi quyết định sử dụng Regex để loại bỏ các ký tự không phải chữ cái, sau đó xâu chuỗi các kết quả theo độ dài mà tôi cần.
string newPassword = Membership.GeneratePassword(50, 0);
newPassword = Regex.Replace(newPassword, @"[^a-zA-Z0-9]", m => "");
newPassword = newPassword.Substring(0, 10);
Cảm ơn tôi đã sử dụng nó trong dự án của tôi –
Mặc dù không khả thi, mật khẩu ban đầu được tạo có thể chứa ít hơn 10 ký tự chữ và số, sau đó kết quả là ArgumentOutOfRangeException() được ném bởi phương thức Substring(). – Chris
Tôi cầu xin @Chris khác nhau. 50 trong 'Membership.GeneratePassword' chỉ định chiều dài của mật khẩu, không chỉ là' MaxLength'. – SollyM
Bạn cũng có thể thử tạo mật khẩu và ghép các ký tự không phải chữ và số cho đến khi đạt đến độ dài mật khẩu mong muốn.
public string GeneratePassword(int length)
{
var sb = new StringBuilder(length);
while (sb.Length < length)
{
var tmp = System.Web.Security.Membership.GeneratePassword(length, 0);
foreach(var c in tmp)
{
if(char.IsLetterOrDigit(c))
{
sb.Append(c);
if (sb.Length == length)
{
break;
}
}
}
}
return sb.ToString();
}
Có cách tiếp cận tương tự với giải pháp của breigo. Có thể điều này không hiệu quả nhưng rõ ràng và ngắn gọn
string GeneratePassword(int length)
{
var password = "";
while (password.Length < length)
{
password += string.Concat(Membership.GeneratePassword(1, 0).Where(char.IsLetterOrDigit));
}
return password;
}
- 1. Trình tạo mật khẩu Django
- 2. Hạn sử dụng mật khẩu thành viên ASP.NET
- 3. Thay đổi mật khẩu API thành viên ASP.NET
- 4. HTML/CSS: Cách nhập "mật khẩu" hiển thị mật khẩu?
- 5. vải và svn mật khẩu
- 6. Tại sao mật khẩu băm khác nhau cho 2 người dùng có cùng mật khẩu?
- 7. Khôi phục mật khẩu bằng mật khẩu sha1 băm
- 8. Rails Mật khẩu chỉ đăng nhập
- 9. gitosis yêu cầu mật khẩu
- 10. Làm cách nào để thay đổi mật khẩu gốc thành mật khẩu trống?
- 11. Tạo mã bí mật để đặt lại mật khẩu
- 12. Mã hóa mật khẩu
- 13. mật khẩu redacting logger
- 14. Đập mật khẩu
- 15. mật khẩu hudson git https, làm cách nào để chỉ định mật khẩu?
- 16. Quên mật khẩu URL
- 17. Mật khẩu ứng dụng và bảo mật SQLite
- 18. Mật khẩu vải
- 19. Lưu trữ mật khẩu Windows
- 20. mạnh mật khẩu regex
- 21. Hash trên Unicode Mật khẩu
- 22. Cách tạo trường mật khẩu trong xcode
- 23. "Màn hình khóa" có mật khẩu bảo mật tùy chỉnh
- 24. Hướng dẫn cho một bộ đếm mật khẩu mật khẩu (Trình kiểm tra mật khẩu) Thiết kế
- 25. OpenSSL - Mật khẩu và Mục đích Muối
- 26. Nơi để lưu trữ muối mật khẩu và cách lấy mật khẩu
- 27. Mysqldump đưa ra bởi cron và mật khẩu bảo mật
- 28. Ràng buộc hộp mật khẩu
- 29. Phát sinh: Tạo Người dùng không có Mật khẩu, sau đó Yêu cầu Mật khẩu để Sử dụng Tài khoản?
- 30. Mật khẩu TAdoConnection gửi AWOL
Tại sao bạn muốn thực hiện việc này? Các ký tự đặc biệt là một điều tốt để có trong mật khẩu của bạn. Nếu (đối với một số lý do kỳ lạ ngoài hiểu của tôi) bạn thực sự muốn một, viết phương pháp của riêng bạn để tạo ra nó và không sử dụng GeneratePassword. –
Một lý do là vì những mật khẩu được tạo ra đó không thực sự thân thiện với toàn cầu hóa. Một lý do khác là Giám đốc điều hành sử dụng ứng dụng này đã nổi giận với mật khẩu xấu xí nhưng chưa được bảo mật và yêu cầu bạn thay đổi mật khẩu đó. – Greg
Hoặc trong trường hợp của tôi, các dấu chấm câu đang gây ra lỗi máy chủ trong API mà tôi đang gọi. – Drew