我已经读过,在对密码进行散列时,许多程序员建议使用BCrypt算法.
我正在使用C#进行编程,并且想知道是否有人知道BCrypt的良好实现?我找到了这个页面,但我真的不知道它是不是假的.
选择密码哈希方案时应该注意什么?BCrypt是一个"好"的实现吗?
我正在尝试对Url中的加密ID进行编码.像这样:http://www.calemadr.com/Membership/Welcome/9xCnCLIwzxzBuPEjqJFxC6XJdAZqQsIDqNrRUJoW6229IIeeL4eXl5n1cnYapg+N
但是,它要么没有正确编码,我在加密中得到斜杠"/",或者我收到来自IIS的错误:请求过滤模块配置为拒绝包含双转义序列的请求.
我尝试了不同的编码,每个都失败了:
更新
问题是当我加密Guid并将其转换为base64字符串时,它将包含不安全的url字符.当然,当我试图导航到包含不安全字符的URL时,IIS(7.5/windows 7)会爆炸.Url编码base64加密字符串会引发IIS中的错误(请求过滤模块配置为拒绝包含双转义序列的请求.).我不确定它是如何检测双重编码的字符串但它确实如此.
尝试上述方法后编码base64加密字符串.我决定删除base64编码.但是,这会将加密文本保留为byte [].我尝试了UrlEncoding byte [],这是挂起httpUtility.Encode方法的重载之一.同样,虽然它是URL编码,但IIS不喜欢它,并提供了"找不到页面".
在网上挖掘后,我遇到了一个HexEncoding/Decoding类.将Hex编码应用于加密字节就可以了.输出是url安全的.另一方面,我对解码和解密十六进制字符串没有任何问题.
我试图在ASP.NET MVC 2 Preview 1应用程序中实现一个每请求会话模式,并且我实现了一个IHttpModule来帮助我这样做:
public class SessionModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.Response.Write("Init!");
context.EndRequest += context_EndRequest;
}
// ... etc...
}
Run Code Online (Sandbox Code Playgroud)
我把它放到web.config中:
<system.web>
<httpModules>
<add name="SessionModule" type="MyNamespace.SessionModule" />
</httpModules>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="SessionModule" />
<add name="SessionModule" type="MyNamespace.SessionModule" />
</modules>
Run Code Online (Sandbox Code Playgroud)
但是,"初始!" 永远不会写入页面(我使用的是内置的VS Web服务器,Cassini).另外,我已经尝试在SessionModule中放置断点但它们永远不会破坏.我错过了什么?