当我们网站上的用户丢失密码并前往"忘记密码"页面时,我们需要给他一个新的临时密码.我真的不介意这是多么随机,或者如果它匹配所有"需要的"强密码规则,我想要做的就是给他们一个密码,以便以后更改.
该应用程序是一个用C#编写的Web应用程序.所以我一直在考虑使用Guid的简单方法.即
Guid.NewGuid().ToString("d").Substring(1,8)
Run Code Online (Sandbox Code Playgroud)
Suggesstions?想法?
我想知道如何在C#中生成一个强大而安全的密码.
我用谷歌搜索了一下,在维基百科中看到了这个公式,L密码的长度在哪里,是N可能的符号数:

此外,我发现了这个问题,但由于某种原因,该方法Membership.GeneratePassword只返回一个1位数的随机数,绝对没有密码.所有其余的解决方案都很慢(> = 0.5秒).
我需要帮助实现这个公式(我不知道从哪里开始).您也可以建议另一种解决方案或解释为什么GeneratePassword不起作用.
如果您使用GUID作为面向公众的应用程序的密码作为获取服务访问权的手段,这种安全性是否通过默默无闻?
我认为显而易见的答案是肯定的,但是对我来说安全级别似乎很高,因为猜测GUID的可能性非常低是正确的吗?
更新
GUID将存储在设备中,当插入时,将通过SSL连接通过GUID发送.
也许我可以生成GUID,然后在GUID上执行AES 128位加密并将该值存储在设备上?
我有一个文件输入控件.
<input type="file" name="file" id="SaveFileToDB"/>
Run Code Online (Sandbox Code Playgroud)
让我们说我浏览到C:/Instruction.pdf文档并单击提交.在提交时,我想将文档保存在RavenDB中,稍后将其检索以供下载.我看到这个链接http://ravendb.net/docs/client-api/attachments 说...做这个..
Stream data = new MemoryStream(new byte[] { 1, 2, 3 });
documentStore.DatabaseCommands.PutAttachment("videos/2", null, data,
new RavenJObject {{"Description", "Kids play in the garden"}});
Run Code Online (Sandbox Code Playgroud)
我不遵循1,2,3这里的意思以及在命令中说视频/ 2意味着什么...我如何在我的情况下使用这两行来保存word/pdf在ravendb中.如果有人以前做过这样的事情,请告知.
我不清楚一件事......附件是如何存储的.如果我想存储附件本身(比如pdf),它会独立存储在ravendb ..我只是将附件的密钥存储在与之关联的主文档中?如果是这样的话,pdf在物理上存储在ravendb中的哪个位置?我可以看吗?
在我的Asp.Net MVC 5项目中,我首先使用Entity Framework代码来处理MS SQL数据库.假设这是表:
public class Ticket
{
[Key]
public int Id { get; set; }
[Required]
public string ReferenceCode { get; set; }
//Rest of the table
}
Run Code Online (Sandbox Code Playgroud)
在此表中,每当我添加新代码时,我希望该ReferenceCode列是具有特定长度的唯一且随机的AlphaNumeric(仅包含字母和数字)字符串.这将允许用户引用特定的票证.
这些都是一些例子有10个字符长度:TK254X26W1,W2S564Z111,1STT135PA5...
现在,我能够生成给定长度的随机字符串.但是,我不确定如何保证它们的独特性.我是这样做的:
db.Tickets.Add(new Ticket()
{
ReferenceCode = GenerateRandomCode(10),
//...
});
Run Code Online (Sandbox Code Playgroud)
确切地说,我希望GenerateRandomCode函数或其他方法能够确保生成的字符串未被用于其他记录.
我可以使用for循环来检查每个生成的代码,但我认为这不是一个好主意.特别是一段时间后,表会有数千条记录.
我正在创建一个生成随机数的密码生成器,然后我使用ascii将其转换为一个字母.在for循环中,我需要字母来转换字符串而不是列表.它可以工作,但它只是将随机字母显示为列表.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
class MainClass
{
static void Main()
{
int x = 1;
int length;
string a = "Press any key to continue";
object num;
while (x == 1)
{
Console.WriteLine("How many Characters would you like the Password to be? (Press -1 to Stop)");
length = Convert.ToInt32(Console.ReadLine());
try
{
for (int i = 0; i < length; i++)
{
int num1 = Number();
Int32 ASCII = num1;
num = (char)num1;
if …Run Code Online (Sandbox Code Playgroud) 注意:为简洁起见,以下内容无法区分随机性和伪随机性.此外,在此上下文中,约束意味着给定的最小值和最大值之间)
本System.Random类提供随机生成整数,双打和字节数组.使用Random.Next,可以轻松生成类型为布尔值,字符,(S)字节,(U)Int16,(U)Int32的随机约束值.使用时Random.NextDouble(),可以类似地生成Double和Single类型的约束值(就我对此类型的理解而言).随机串生成(给定长度和字母的)已经 也 被 解决 之前.
考虑剩余的原始数据类型(不包括Object):Decimal和(U)Int64.他们的随机生成也已被解决(Decimal,(U)Int64使用Random.NextBytes()),但不受限制.理论上可以使用拒绝采样(即循环直到生成的值是所需范围),但这显然不是一个实际的解决方案.归一化NextDouble()不起作用,因为它没有足够的有效数字.
简而言之,我要求正确实现以下功能:
long NextLong(long min, long max)
long NextDecimal(decimal min, decimal max)
Run Code Online (Sandbox Code Playgroud)
请注意,由于System.DateTime基于ulong,第一个函数也允许随机约束生成此类结构(类似于此处,仅在刻度而不是分钟内).
我需要保证 ID 的唯一性。即使有 1 万亿分之一的机会被骗,我也不能使用它。
但我也不想走到天涯海角去寻找解决方案。我花了一些时间研究这个问题,迄今为止我发现的一切都无法为我提供一个唯一的 ID。
所以我想我会使用一些非常简单的东西,就像这样:
public static string GenerateItemID()
{
string year = DateTime.Now.Year.ToString(),
month = DateTime.Now.Month.ToString(),
day = DateTime.Now.Day.ToString(),
hour = DateTime.Now.Hour.ToString(),
minute = DateTime.Now.Minute.ToString(),
second = DateTime.Now.Second.ToString(),
millisecond = DateTime.Now.Millisecond.ToString();
return year + month + day + hour + minute + second + millisecond;
}
Run Code Online (Sandbox Code Playgroud)
我的逻辑是:生成的每个新 UI 不可能与之前的任何 UI 相同。但后来我想知道 PC 是否有可能在同一毫秒内生成两个或多个这些 ID?当然,我随后在 Intellisense 中寻找纳秒属性,但它不存在。
怎样才能被一个ID garunteed是唯一的?
在此答案中,发布了以下代码,用于创建唯一的随机字母数字字符串.有人可以向我澄清他们在这段代码中是如何确保它们的独特性以及它们在多大程度上是独一无二的?如果我在不同的场合重新运行这种方法,我还会得到独特的字符串吗?
或者我只是误解了答案,这些根本没有生成唯一的密钥,只是随机的?
我已经在对该答案的评论中询问了这一点,但用户似乎处于非活动状态.
public static string GetUniqueKey()
{
int maxSize = 8;
char[] chars = new char[62];
string a;
a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
chars = a.ToCharArray();
int size = maxSize;
byte[] data = new byte[1];
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
crypto.GetNonZeroBytes(data);
size = maxSize;
data = new byte[size];
crypto.GetNonZeroBytes(data);
StringBuilder result = new StringBuilder(size);
foreach (byte b in data)
{ result.Append(chars[b % (chars.Length - 1)]); }
return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)