当前位置: 首页 > news >正文

做塑胶网站需要什么材料合肥专业做公司网站

做塑胶网站需要什么材料,合肥专业做公司网站,c网站开发案例详解代码,学建网站要多久.NET 6 中哈希算法的简化用法Intro微软在 .NET 6 中引入一些更简单的 API 来使用 HMAC 哈希算法#xff08;MD5/SHA1/SHA256/SHA384/SHA512)微软的叫法叫做 HMAC One-Shoot method, HMAC 算法在普通的哈希算法基础上增加了一个 key#xff0c;通过 key 提升了安全性#xff… .NET 6 中哈希算法的简化用法Intro微软在 .NET 6 中引入一些更简单的 API 来使用 HMAC 哈希算法MD5/SHA1/SHA256/SHA384/SHA512)微软的叫法叫做 HMAC One-Shoot method, HMAC 算法在普通的哈希算法基础上增加了一个 key通过 key 提升了安全性能够有效避免密码泄露被彩虹表反推出真实密码 JWT(Json Web Token) 除了可以使用 RSA 方式外也支持使用 HMAC 。New API新增的 API 定义如下namespace System.Security.Cryptography {public partial class HMACMD5 {public static byte[] HashData(byte[] key, byte[] source);public static byte[] HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source);public static int HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination);public static bool TryHashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination, out int bytesWritten);}public partial class HMACSHA1 {public static byte[] HashData(byte[] key, byte[] source);public static byte[] HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source);public static int HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination);public static bool TryHashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination, out int bytesWritten);}public partial class HMACSHA256 {public static byte[] HashData(byte[] key, byte[] source);public static byte[] HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source);public static int HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination);public static bool TryHashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination, out int bytesWritten);}public partial class HMACSHA384 {public static byte[] HashData(byte[] key, byte[] source);public static byte[] HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source);public static int HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination);public static bool TryHashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination, out int bytesWritten);}public partial class HMACSHA512 {public static byte[] HashData(byte[] key, byte[] source);public static byte[] HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source);public static int HashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination);public static bool TryHashData(ReadOnlySpanbyte key, ReadOnlySpanbyte source, Spanbyte destination, out int bytesWritten);} } Sample Before在之前的版本中想要实现计算 HMAC 算法会比较复杂之前实现了一个 HashHelper 来封装了常用的 Hash 算法和 HMAC 算法HashHelper 部分代码如下完整代码可以从 Github 获取https://github.com/WeihanLi/WeihanLi.Common/blob/dev/src/WeihanLi.Common/Helpers/HashHelper.cs/// summary /// 获取哈希之后的字符串 /// /summary /// param nametype哈希类型/param /// param namesource源/param /// param namekeykey/param /// param nameisLower是否是小写/param /// returns哈希算法处理之后的字符串/returns public static string GetHashedString(HashType type, byte[] source, byte[]? key, bool isLower  false) {Guard.NotNull(source, nameof(source));if (source.Length  0){return string.Empty;}var hashedBytes  GetHashedBytes(type, source, key);var sbText  new StringBuilder();if (isLower){foreach (var b in hashedBytes){sbText.Append(b.ToString(x2));}}else{foreach (var b in hashedBytes){sbText.Append(b.ToString(X2));}}return sbText.ToString(); }/// summary /// 计算字符串Hash值 /// /summary /// param nametypehash类型/param /// param namestr要hash的字符串/param /// returnshash过的字节数组/returns public static byte[] GetHashedBytes(HashType type, string str)  GetHashedBytes(type, str, Encoding.UTF8);/// summary /// 计算字符串Hash值 /// /summary /// param nametypehash类型/param /// param namestr要hash的字符串/param /// param nameencoding编码类型/param /// returnshash过的字节数组/returns public static byte[] GetHashedBytes(HashType type, string str, Encoding encoding) {Guard.NotNull(str, nameof(str));if (str  string.Empty){return Array.Emptybyte();}var bytes  encoding.GetBytes(str);return GetHashedBytes(type, bytes); }/// summary /// 获取Hash后的字节数组 /// /summary /// param nametype哈希类型/param /// param namebytes原字节数组/param /// returns/returns public static byte[] GetHashedBytes(HashType type, byte[] bytes)  GetHashedBytes(type, bytes, null);/// summary /// 获取Hash后的字节数组 /// /summary /// param nametype哈希类型/param /// param namekeykey/param /// param namebytes原字节数组/param /// returns/returns public static byte[] GetHashedBytes(HashType type, byte[] bytes, byte[]? key) {Guard.NotNull(bytes, nameof(bytes));if (bytes.Length  0){return bytes;}HashAlgorithm algorithm  null!;try{if (key  null){algorithm  type switch{HashType.SHA1  new SHA1Managed(),HashType.SHA256  new SHA256Managed(),HashType.SHA384  new SHA384Managed(),HashType.SHA512  new SHA512Managed(),_  MD5.Create()};}else{algorithm  type switch{HashType.SHA1  new HMACSHA1(key),HashType.SHA256  new HMACSHA256(key),HashType.SHA384  new HMACSHA384(key),HashType.SHA512  new HMACSHA512(key),_  new HMACMD5(key)};}return algorithm.ComputeHash(bytes);}finally{algorithm.Dispose();} } 使用示例如下HashHelper.GetHashedBytes(HashType.MD5, test); HashHelper.GetHashedBytes(HashType.MD5, test.GetBytes()); HashHelper.GetHashedBytes(HashType.MD5, test, testKey); HashHelper.GetHashedBytes(HashType.MD5, test.GetBytes(), testKey.GetBytes());HashHelper.GetHashedString(HashType.MD5, test); HashHelper.GetHashedString(HashType.SHA1, test.GetBytes()); HashHelper.GetHashedString(HashType.SHA256, test, testKey); HashHelper.GetHashedString(HashType.MD5, test.GetBytes(), testKey.GetBytes()); New API Sample有了新的 API 以后可以怎么简化呢来看下面的示例var bytes  test.GetBytes(); var keyBytes  test-key.GetBytes();// HMACMD5 var hmd5V1  HMACMD5.HashData(keyBytes, bytes); var hmd5V2  HashHelper.GetHashedBytes(HashType.MD5, bytes, keyBytes); Console.WriteLine(hmd5V2.SequenceEqual(hmd5V1));// HMACSHA1 var hsha1V1  HMACSHA1.HashData(keyBytes, bytes); var hsha1V2  HashHelper.GetHashedBytes(HashType.SHA1, bytes, keyBytes); Console.WriteLine(hsha1V2.SequenceEqual(hsha1V1));// HMACSHA256 var hsha256V1  HMACSHA256.HashData(keyBytes, bytes); var hsha256V2  HashHelper.GetHashedBytes(HashType.SHA256, bytes, keyBytes); Console.WriteLine(hsha256V2.SequenceEqual(hsha256V1));// HMACSHA384 var hsha384V1  HMACSHA384.HashData(keyBytes ,bytes); var hsha384V2  HashHelper.GetHashedBytes(HashType.SHA384, bytes, keyBytes); Console.WriteLine(hsha384V2.SequenceEqual(hsha384V1));// HMACSHA512 var hsha512V1  HMACSHA512.HashData(keyBytes ,bytes); var hsha512V2  HashHelper.GetHashedBytes(HashType.SHA512, bytes, keyBytes); Console.WriteLine(hsha512V2.SequenceEqual(hsha512V1)); 直接使用对应的 HMAC 哈希算法的 HashData 方法即可传入对应的 key 和 原始内容就可以了上面是和我们 HashHelper 封装的方法进行对比看结果是否一致都是一致的输出结果如下More对于普通的哈希算法微软其实在 .NET 5 就已经支持了上面的用法可以尝试一下下面的代码var bytes  test.GetBytes();// MD5 var md5V1  MD5.HashData(bytes); var md5V2  HashHelper.GetHashedBytes(HashType.MD5, bytes); Console.WriteLine(md5V2.SequenceEqual(md5V1));// SHA1 var sha1V1  SHA1.HashData(bytes); var sha1V2  HashHelper.GetHashedBytes(HashType.SHA1, bytes); Console.WriteLine(sha1V2.SequenceEqual(sha1V1));// SHA256 var sha256V1  SHA256.HashData(bytes); var sha256V2  HashHelper.GetHashedBytes(HashType.SHA256, bytes); Console.WriteLine(sha256V2.SequenceEqual(sha256V1));// SHA384 var sha384V1  SHA384.HashData(bytes); var sha384V2  HashHelper.GetHashedBytes(HashType.SHA384, bytes); Console.WriteLine(sha384V2.SequenceEqual(sha384V1));// SHA512 var sha512V1  SHA512.HashData(bytes); var sha512V2  HashHelper.GetHashedBytes(HashType.SHA512, bytes); Console.WriteLine(sha512V2.SequenceEqual(sha512V1)); 很多时候我们可能都会要使用 MD5 或者 SHA1 之后的字符串不知道为什么微软没有直接获取一个字符串的方法如果有这样一个方法就会更方便了相比之后感觉还是自己封装的 HashHelper 使用起来更舒服一些哈哈这样的静态方法不够抽象如果要动态替换哈希算法代码可能就有点...Referenceshttps://github.com/dotnet/runtime/pull/53487https://github.com/dotnet/runtime/issues/40012https://github.com/dotnet/core/issues/6569#issuecomment-913876347https://baike.baidu.com/item/hmac/7307543?fraladdinhttps://github.com/WeihanLi/SamplesInPractice/blob/master/net6sample/HashSample/Program.cshttps://github.com/WeihanLi/WeihanLi.Common/blob/dev/src/WeihanLi.Common/Helpers/HashHelper.cs
http://wiki.neutronadmin.com/news/420619/

相关文章:

  • 中国做出口的网站平台购物网站国外
  • 常州网站建设专业的公司网站建设价格gxjzdrj
  • html搭建网站毕业纪念册设计制作图片
  • 大学生做网站赚钱公司网络安全管理制度和应急工作预案
  • 做淘宝门头的网站网站开发的常用流程
  • 重庆网站线上推广海淀高端企业网站建设
  • 调兵山网站商务网站建设论文
  • 个人网站如何建设紧急通知网页升级
  • 海兴做网站分割页面
  • 域名网站购买移动互联与网站开发
  • 怎样建设公司网站小程序做网站税率
  • 做二手的网站有哪些重庆城市建设档案馆网站
  • 做图片能去哪些网站吗重庆沙坪坝
  • 安阳网站建设设计seo搜索引擎的优化
  • 自己动手建立网站3黑科技引流推广神器
  • 凡客集团重庆seo整站优化系统
  • 校园微网站界面seo黑帽2022
  • 苏州市建设工程建设中心网站图书拍卖网站开发遇到的问题
  • 做3D打印样品用什么外贸网站好黄骅市天气预报15天气
  • asp网站做视频是不是做推广都得有网站
  • 加强网站建设技术培训网站开发可能遇到的问题
  • 外贸 企业网站 建设项目建设管理系统
  • 成都网站开发哪家好创造一个app要多少钱
  • 河南论坛网站建设公共货运平台
  • 内网门户网站建设方案wordpress 删除 角色
  • 西宁知名网站设计公司怎样做微商网站
  • 网站策划书案例高端网站改版顾问
  • 网站策划的最终体现是撰写网站策划书网站链接加密
  • 网站公司建设网站价格怎么申请域名邮箱
  • 做棋牌网站要什么源码网站开篇动画