1. public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
  2. {
  3. string[] passwordProperties = hashedPassword.Split('|');
  4. if (passwordProperties.Length != )
  5. {
  6. return base.VerifyHashedPassword(hashedPassword, providedPassword);
  7. }
  8. else
  9. {
  10. string passwordHash = passwordProperties[];
  11. int passwordformat = ;
  12. string salt = passwordProperties[];
  13. if (String.Equals(EncryptPassword(providedPassword, passwordformat, salt), passwordHash, StringComparison.CurrentCultureIgnoreCase))
  14. {
  15. return PasswordVerificationResult.SuccessRehashNeeded;
  16. }
  17. else
  18. {
  19. return PasswordVerificationResult.Failed;
  20. }
  21. }
  22. }
  23.  
  24. private string EncryptPassword(string pass, int passwordFormat, string salt)
  25. {
  26. if (passwordFormat == )
    return pass;
  27.  
  28. byte[] bIn = Encoding.Unicode.GetBytes(pass);
  29. byte[] bSalt = Convert.FromBase64String(salt);
  30. byte[] bRet = null;
  31.  
  32. if (passwordFormat == )
  33. { // MembershipPasswordFormat.Hashed
  34. HashAlgorithm hm = HashAlgorithm.Create("SHA1");
  35. if (hm is KeyedHashAlgorithm)
  36. {
  37. KeyedHashAlgorithm kha = (KeyedHashAlgorithm)hm;
  38. if (kha.Key.Length == bSalt.Length)
  39. {
  40. kha.Key = bSalt;
  41. }
  42. else if (kha.Key.Length < bSalt.Length)
  43. {
  44. byte[] bKey = new byte[kha.Key.Length];
  45. Buffer.BlockCopy(bSalt, , bKey, , bKey.Length);
  46. kha.Key = bKey;
  47. }
  48. else
  49. {
  50. byte[] bKey = new byte[kha.Key.Length];
  51. for (int iter = ; iter < bKey.Length; )
  52. {
  53. int len = Math.Min(bSalt.Length, bKey.Length - iter);
  54. Buffer.BlockCopy(bSalt, , bKey, iter, len);
  55. iter += len;
  56. }
  57. kha.Key = bKey;
  58. }
  59. bRet = kha.ComputeHash(bIn);
  60. }
  61. else
  62. {
  63. byte[] bAll = new byte[bSalt.Length + bIn.Length];
  64. Buffer.BlockCopy(bSalt, , bAll, , bSalt.Length);
  65. Buffer.BlockCopy(bIn, , bAll, bSalt.Length, bIn.Length);
  66. bRet = hm.ComputeHash(bAll);
  67. }
  68. }
  69.  
  70. return Convert.ToBase64String(bRet);
  71. }

PasswordHasher 算法的更多相关文章

  1. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  2. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  3. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  4. 红黑树——算法导论(15)

    1. 什么是红黑树 (1) 简介     上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...

  5. 散列表(hash table)——算法导论(13)

    1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...

  6. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

  7. 简单有效的kmp算法

    以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...

  8. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  9. 46张PPT讲述JVM体系结构、GC算法和调优

    本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...

随机推荐

  1. 【BZOJ2836】魔法树 树链剖分

    [BZOJ2836]魔法树 Description Input Output Sample Input 4 0 1 1 2 2 3 4 Add 1 3 1 Query 0 Query 1 Query ...

  2. Spring MVC 多语言化的实践和学习

    一.主要参考: SpringMVC简单实现国际化/多语言 - CSDN博客 https://blog.csdn.net/u013360850/article/details/70860144/ 二.总 ...

  3. SharePoint服务器端对象模型 完结

    整个系列已完结,大概看了一眼,平均阅读量不到200.估计也没什么人看了,而且服务器端对象模型除了在某些企业开发中会用到,从2013时代开始其实已经不是SharePoint开发的最佳选择了.不过既然已经 ...

  4. Net应用架构设计

    N-Tier 是从架构更大的维度上划分,每一个维度都是一个Tier(在微软的ESP2.0里翻译为”级”),比如电商架构划分如下: UI 服务接口 消息.缓存中间件 数据库 ...... Tier与Ti ...

  5. HYSBZ 2160 拉拉队排练(回文树)

    2160: 拉拉队排练 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 825  Solved: 324 [Submit][Status][Discu ...

  6. 关于redux应用

    redux 有点类似flux.但是我觉得远比flux要复杂.因为他非常的绕.一般搭配使用是redux 和react-redux 使用. 主要的思路就是: 写action:动作类型 写reducer:动 ...

  7. python之MySQL学习——数据操作

    1.增 import pymysql as ps # 打开数据库连接 db = ps.connect(host=', database='test', charset='utf8') # 创建一个游标 ...

  8. Spoken English Practice(not always estimating your status in other's hearts. you will lose yourself when you live in other's look. do your best and walk on you own way.)

    绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/7/8) 英 ...

  9. Python设计模式-装饰器模式

    装饰器模式 装饰器模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活. 代码示例 #coding:utf-8 #装饰器模式 class Beverage():   ...

  10. 详解JMeter函数和变量(转载)

    详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var ...