这可以简化为一个class轮吗? 只要secureString得到正确的初始化,随意彻底重写它。 SecureString secureString = new SecureString (); foreach (char c in "fizzbuzz".ToCharArray()) { secureString.AppendChar (c); }
如果我理解正确,这是为了保持纯文本内存不足,这样的应用程序是安全的反对内存,垃圾堆或内存分页到磁盘的深奥攻击。 SecureString提供非托pipe字节,并在一次消耗一个非托pipe字节 – 然后该string从内存中删除。 (如果我离开,纠正我!) 在ASP.NET中,秘密被收集在一个Web表单中,并以HTTPS的forms发回。 但是,然后Request对象将表单中的所有请求值转换为名称值对,并将它们放在一个集合中,例如Request [“TxtPassword”] – 因此,即使在我得到string之前,它已经被不安全地写入内存。 更糟的是,如果我使用的是控件,那么不安全的表示将在TextBox的属性中有更多的托pipestring。 对这个SecureString做任何事我需要一个接受非托pipestring的API – 所以看来我不能使用安全string存储proc参数或其他许多。 我这样做是错误的,还是试图使用SecureString而不是将不安全string的副本泄露到托pipe内存中是一个愚蠢的错误? 切换到OAuth或Windows身份validation不是一个选项。
在这个问题上, Erik需要在Node.js中生成一个安全的随机标记。 有一个方法crypto.randomBytes生成一个随机的缓冲区。 但是,节点中的base64编码不是url安全的,它包含/和+而不是-和_ 。 因此,我发现的最简单的方法来生成这样的令牌 require('crypto').randomBytes(48, function(ex, buf) { token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-'); }); 有没有更优雅的方式?