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

有做任务赚赏金的网站吗wordpress如何设置分类目录

有做任务赚赏金的网站吗,wordpress如何设置分类目录,阿里建站系统,教育培训门户网站模板下载数据保护#xff08;Data Protection#xff09;框架旨在解决数据在传输与持久化存储过程中的一致性#xff08;Integrity#xff09;和机密性#xff08;confidentiality#xff09;问题#xff0c;前者用于检验接收到的数据是否经过篡改#xff0c;后者通过对原始的数…数据保护Data Protection框架旨在解决数据在传输与持久化存储过程中的一致性Integrity和机密性confidentiality问题前者用于检验接收到的数据是否经过篡改后者通过对原始的数据进行加密以避免真实的内容被人窥视。数据保护是支撑ASP.NET身份认证的一个重要的基础框架同时也可以作为独立的框架供我们使用。[本文节选《ASP.NET Core 6框架揭秘》第13章][S1301]数据的加解密源代码[S1302]Purpose字符串一致性源代码[S1303]设置加密内容的有效期源代码[S1304]撤销加密密钥单个密钥源代码[S1305]撤销加密密钥所有密钥源代码[S1306]瞬时加解密源代码[S1307]密钥哈希源代码[S1301]数据的加解密对提供的原始数据字符串或者二进制数组进行加密是数据保护框架体提供的基本功能接下来我们利用一个简单的控制台程序来演示一下加解密如何实现。数据的加解密均由IDataProtector对象来完成而该对象由IDataProtectionProvider不是IDataProtectorProvider对象来提供所以在大部分应用场景中针对数据的加密和解密只涉及这两个对象。有了依赖注入的加持我们也不需要了解这两个接口的具体实现类型只需要在利用注入的IDataProtectionProvider对象来提供对应的IDataProtector对象并利用后者完成加解密的工作。上述的这两个接口定义在 “Microsoft.AspNetCore.DataProtection.Abstractions”这个NuGet包中它们的默认实现类型以及其他核心类型则承载于NuGet包 “Microsoft.AspNetCore.DataProtection”中所以我们需要为演示程序添加针对这个NuGet包的引用。由于需要使用到依赖注入框架我们需要添加针对“Microsoft.Extensions.DependencyInjection”的引用。必要的NuGet包引用添加完成之后我们编写了如下的演示程序。using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using System.Diagnostics;var originalPayload  Guid.NewGuid().ToString(); var protectedPayload  Encrypt(foo, originalPayload); var unprotectedPayload  Decrypt(foo, protectedPayload); Debug.Assert(originalPayload  unprotectedPayload);static string Encrypt(string purpose, string originalPayload)  GetDataProtector(purpose).Protect(originalPayload); static string Decrypt(string purpose, string protectedPayload)  GetDataProtector(purpose).Unprotect(protectedPayload);static IDataProtector GetDataProtector(string purpose) {var services  new ServiceCollection();services.AddDataProtection();return services.BuildServiceProvider().GetRequiredServiceIDataProtectionProvider().CreateProtector(purpose); }如上面的代码片段所示我们将数据的加密和解密操作分别定义在Encrypt和Decrypt方法中它们使用IDataProtector对象由GetDataProtector方法来提供。在GetDataProtector方法中我们创建了一个ServiceCollection对象并调用AddDataProtection扩展方法注册了数据保护框架的基础服务。我们最终利用构建的IServiceProvider对象来提供所需的IDataProtectionProvider对象。IDataProtectionProvider接口的CreateProtector方法定义了一个字符串类型名为“purpose”的参数。从字面上来讲该参数表示加密的“目的Purpose”它在整个数据保护模型中起到了“秘钥隔离”的作用我们在本书后续内容中将其称为“Purpose字符串”。Encrypt和Decrypt方法来利用指定的Purpose字符串作为参数调用GetDataProtector方法得到对应的IDataProtector对象之后分别调用了该对象的Protect和Unprotect方法完成了针对给定文本内容的加密和解密。我们使用一个GUID转换的字符串作为待加密的数据并使用“foo”作为Purpose字符串调用Encrypt方法对它进行了加密最后采用相同的Purpose字符串调用Decrypt方法对加密内容进行解密。前面的演示实例通过调用IServiceProvider对象的GetRequiredServiceT扩展方法得到所需的IDataProtectionProvider对象该对象也可以按照如下的形式调用GetDataProtectionProvider扩展方法来获取。IServiceProvider接口还定义了如下这个GetDataProtector扩展方法直接返回IDataProtector对象。... static IDataProtector GetDataProtector(string purpose) {var services  new ServiceCollection();services.AddDataProtection();return services.BuildServiceProvider().GetDataProtectionProvider().CreateProtector(purpose); }或者... static IDataProtector GetDataProtector(string purpose) {var services  new ServiceCollection();services.AddDataProtection();return services.BuildServiceProvider().GetDataProtector(purpose); }除了利用依赖注入框架我们也可以按照如下的方法利用静态类型DataProtectorProvider定义在“Mcrosoft.AspNetCore.DataProtection.Extensions”NuGet包中来创建IDataProtectionProvider对象。该类型提供了若干用于创建IDataProtector对象的Create方法重载我们选择的重载传入的参数为当前应用的名称。... static IDataProtector GetDataProtector(string purpose)  DataProtectionProvider.Create(App).CreateProtector(purpose);[S1302]Purpose字符串一致性前面我们说到参与同一份数据加解密的两个IDataProtector对象必须具有一致的Purpose字符串我们现在就来验证这一点。如下面的代码片段所示我们在调用Decrypt方法进行解密的时候将Purpose字符串从“foo”替换成“bar”。... var originalPayload  Guid.NewGuid().ToString(); var protectedPayload  Encrypt (foo, originalPayload); var unprotectedPayload  Decrypt (bar, protectedPayload); Debug.Assert(originalPayload  unprotectedPayload); ...当我们调用IDataProtector对象的Unprotect方法对指定内容进行解密时由于当前Purpose字符串与待解密内容采用的Purpose字符串不符会直接抛出如图1所示的CryptographicException异常。图1 Purpose字符串不一致导致的异常[S1303]设置加密内容的有效期我们知道不论采用的何种加密算法采用的秘钥位数有多长如果算力资源或者时间充足解密都能成功。但是黑客具有的算力资源总归是有限的如果能够在秘钥能推算出来之前就已经无效了那么我们采用的加密方式就是安全的。针对有效时间的加解密通过ITimeLimitedDataProtector对象来完成这个接口都定义在“Mcrosoft.AspNetCore.DataProtection.Extensions” 这个NuGet包中。为了使用这个对象我们将演示程序改写成如下的形式。using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using System.Diagnostics;var originalPayload  Guid.NewGuid().ToString(); var protectedPayload  Encrypt(foo, originalPayload, TimeSpan.FromSeconds(5));var unprotectedPayload  Decrypt(foo, protectedPayload); Debug.Assert(originalPayload  unprotectedPayload);await Task.Delay(5000); Decrypt(foo, protectedPayload);static string Encrypt(string purpose, string originalPayload, TimeSpan timeout) GetDataProtector(purpose).Protect(originalPayload, DateTimeOffset.UtcNow.Add(timeout)); static string Decrypt(string purpose, string protectedPayload) GetDataProtector(purpose).Unprotect(protectedPayload, out _);static ITimeLimitedDataProtector GetDataProtector(string purpose) {var services  new ServiceCollection();services.AddDataProtection();return services.BuildServiceProvider().GetDataProtector(purpose).ToTimeLimitedDataProtector(); }我们让GetDataProtector方法返回一个ITimeLimitedDataProtector对象它通过IDataProtector对象的ToTimeLimitedDataProtector扩展方法“转化”而成。用于加密的Encrypt方法添加了一个表示过期时间的timeout参数类型为TimeSpan由于ITimeLimitedDataProtector的Protect方法中表示过期时间的参数类型为DateTimeOffset所以我们基于当前时间和指定的过期时间TimeSpan将这个过期时间点计算出来。ITimeLimitedDataProtector接口用于解密的Unprotect方法具有一个表示过期日期的输出参数。在演示程序中我们调用Encrypt方法对数据进行加密时将过期时间设置为5秒。对于加密后的内容我们采用相同的方式对它进行了两次解密第一个发生在5秒内第二次则发生在5秒后。程序运行后第一次解密成功第二次抛出如图13-3所示的CryptographicException异常。图2 加密数据过期导致的解密异常[S1304]撤销加密密钥单个密钥在如下的演示程序中我们创建了ServiceCollection对象并调用AddDataProtection扩展方法注册了数据保护框架的核心服务。在利用构建的IServiceProvider对象得到IDataProtector对象之后我们利用它对指定的文本进行加密。在此之后我们将加密采用的密钥撤销掉。using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection.KeyManagement; using Microsoft.AspNetCore.DataProtection.KeyManagement.Internal; using Microsoft.Extensions.DependencyInjection;var services  new ServiceCollection(); services.AddDataProtection(); var sericeProvider  services.BuildServiceProvider(); var protector  sericeProvider.GetDataProtector(foobar); var originalPayload  Guid.NewGuid().ToString(); var protectedPayload  protector.Protect(originalPayload);var keyRingProvider  sericeProvider.GetRequiredServiceIKeyRingProvider(); var KeyRing  keyRingProvider.GetCurrentKeyRing(); var keyManager  sericeProvider.GetRequiredServiceIKeyManager(); keyManager.RevokeKey(KeyRing.DefaultKeyId); protector.Unprotect(protectedPayload);具体来说我们利用IServiceProvider对象提供的IKeyRingProvider对象得到对应的IKeyRing对象该对象的DefaultKeyId属性代表默认使用的密钥ID我们撤销的也这是这个ID代表的密钥。我们借助于依赖注入容器得到IKeyManager对象并将此密钥ID作为参数调用其RevokeKey方法。在密钥撤销之后我们利用同一个IDataProtector对加密内容进行解密此时程序会抛出如图3所示的CryptographicException异常。图3 秘钥被撤销导致的解密异常[S1305]撤销加密密钥所有密钥除了调用IKeyManager的RevokeKey方法撤销某个指定的密钥之外我们还可以按照如下的方式调用它的RevokeAllKeys方法撤销所有密钥。如果我们觉得目前的所有密钥均不安全可以调用这个方法。我们在调用该方法的时候需要指定一个撤销的时间和原因可选。using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection.KeyManagement; using Microsoft.Extensions.DependencyInjection;var services  new ServiceCollection(); services.AddDataProtection(); var sericeProvider  services.BuildServiceProvider(); var protector  sericeProvider.GetDataProtector(foobar); var originalPayload  Guid.NewGuid().ToString(); var protectedPayload  protector.Protect(originalPayload);var keyManager  sericeProvider.GetRequiredServiceIKeyManager(); keyManager.RevokeAllKeys(revocationDate: DateTimeOffset.UtcNow, reason: No reason); protector.Unprotect(protectedPayload);[S1306]瞬时加解密在某些应用场景中针对数据的加解密只在一个限定的上下文中进行比如当前应用的生命周期内这种场景适用一种被称为“瞬时Transient或者Ephemeral加解密”的方式。这种加解密方式会使用到EphemeralDataProtectionProvider类型该类型同样实现了ITimeLimitedDataProtector接口。如果我们利用它提供的IDataProtector对象对一段二进制内容进行加密密文只能通过它自身提供的IDataProtector对象才能解开。如下面的代码片段所示我们定义了一个CreateEphemeralDataProtectionProvider方法用来创建上述的这个对象。我们在调用ServiceCollection对象的AddDataProtection扩展方法并得到返回的IDataProtectionBuilder之后我们调用了该对象的UseEphemeralDataProtectionProvider扩展方法完成针对EphemeralDataProtectionProvider的服务注册所以我们最终得到的IDataProtectionProvider对象的类型就是EphemeralDataProtectionProvider。using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using System.Diagnostics;var originalPayload  Guid.NewGuid().ToString(); var dataProtectionProvider  CreateEphemeralDataProtectionProvider(); var protector  dataProtectionProvider.CreateProtector(foobar); var protectedPayload  protector.Protect(originalPayload);protector  dataProtectionProvider.CreateProtector(foobar); Debug.Assert(originalPayload  protector.Unprotect(protectedPayload));protector  CreateEphemeralDataProtectionProvider().CreateProtector(foobar); protector.Unprotect(protectedPayload);static IDataProtectionProvider CreateEphemeralDataProtectionProvider() {var services  new ServiceCollection();services.AddDataProtection().UseEphemeralDataProtectionProvider();return services.BuildServiceProvider().GetRequiredServiceIDataProtectionProvider(); }在利用EphemeralDataProtectionProvider提供的IDataProtector对象对一段文本加密后我们对密文实施了两次解密。第一次采用的IDataProtector对象通过同一个EphemeralDataProtectionProvider对象提供的第二个则则不是。该演示程序运行之后第一次解密顺利完成第二次则抛出了如图4所示的CryptographicException异常。图4 利用EphemeralDataProtectionProvider提供“瞬时”加解密[S1307]密钥哈希用户密码作为机密性最高的信息是不能以明文形式存储的我们一般会存储密码的哈希值。虽然哈希的非对称性确保不能直接通过哈希值得到被哈希的原始内容但是在强大的算力面前已经不足以提供我们期望的安全保障。针对密钥的保护目前最安全的哈希方式应该是PBKDF2Password-Based Key Derivation Function 2。PBKDF2是一种基于密码的Key Derivation采用某种算法根据指定的密码或者主键生成一个密钥函数它采用伪随机函数以任意指定长度导出密钥。它目前是RSA实验室公钥加密标准PKCSPublic-Key Cryptography Standards序列的一部分。PBKDF2提高安全系数主要采用“添加随机盐Salt”和“多次哈希”这两种手段。如果希望对PBKDF2具有深入的了解可以参阅官方规范文档https://tools.ietf.org/html/rfc2898#section-5.2。我们在可以利用“Microsoft.AspNetCore.Cryptography.KeyDerivation”这个NuGet包提供的API来对密码进行哈希。这是一个完全独立的类库与上面介绍的以IDataProtector对象为核心的数据保护框架没有关系。基于PBKDF2的密码哈希可以直接调用KeyDerivation类型的如下这个静态方法Pbkdf2来完成。public static class KeyDerivation {public static byte[] Pbkdf2(string password, byte[] salt, KeyDerivationPrf prf,int iterationCount, int numBytesRequested); }public enum KeyDerivationPrf {HMACSHA1,HMACSHA256,HMACSHA512 }PBKDF2并没有限制使用某种固定的加密算法。在调用上面这个Pbkdf2方法的时候我们可以利用prf参数指定采用的伪随机算法PRFPseudo-random Function。这是一个KeyDerivationPrf类型的枚举三个枚举项对应的哈希算法分别为SHA-1、SHA-256和SHA-512。Pbkdf2方法的其他参数分别表示待哈希的密码、随机盐、迭代次数次数越大、安全系数越大和最终生成哈希值的字节数。using Microsoft.AspNetCore.Cryptography.KeyDerivation; using System.Security.Cryptography;var password  password; var salt  new byte[16]; var iteration  1000;using (var generator  RandomNumberGenerator.Create()) {generator.GetBytes(salt); }Console.WriteLine(Hash(KeyDerivationPrf.HMACSHA1)); Console.WriteLine(Hash(KeyDerivationPrf.HMACSHA256)); Console.WriteLine(Hash(KeyDerivationPrf.HMACSHA512));string Hash(KeyDerivationPrf prf) {var hashed  KeyDerivation.Pbkdf2(password: password,salt: salt,prf: prf,iterationCount: iteration,numBytesRequested: 32);return Convert.ToBase64String(hashed); }上面的代码片段演示了如何为提供的密码“password”生成指定位数32字节256位的哈希值。我们采用一个随机生成的盐值16字节128位执行1000次迭代针对三种不同的哈希算法生成对应的哈希值。Base64编码后的三个哈希值以如图13-5所示的方式输出到控制台上。图5 采用PBKDF2生成的密码哈希《ASP.NET Core 6框架揭秘》实例演示[01]编程初体验《ASP.NET Core 6框架揭秘》实例演示[02]各种形式的API开发《ASP.NET Core 6框架揭秘》实例演示[03]Dapr初体验《ASP.NET Core 6框架揭秘》实例演示[04]自定义依赖注入框架《ASP.NET Core 6框架揭秘》实例演示[05]依赖注入基本编程模式《ASP.NET Core 6框架揭秘》实例演示[06]依赖注入框架设计细节《ASP.NET Core 6框架揭秘》实例演示[07]文件系统《ASP.NET Core 6框架揭秘》实例演示[08]配置的基本编程模式《ASP.NET Core 6框架揭秘》实例演示[09]将配置绑定为对象《ASP.NET Core 6框架揭秘》实例演示[10]Options基本编程模式《ASP.NET Core 6框架揭秘》实例演示[11]诊断跟踪的几种基本编程方式 《ASP.NET Core 6框架揭秘》实例演示[13]日志的基本编程模式《ASP.NET Core 6框架揭秘》实例演示[14]日志的进阶用法《ASP.NET Core 6框架揭秘》实例演示[15]针对控制台的日志输出《ASP.NET Core 6框架揭秘》实例演示[16]内存缓存与分布式缓存的使用《ASP.NET Core 6框架揭秘》实例演示[17]利用IHttpClientFactory工厂来创建HttpClient《ASP.NET Core 6框架揭秘》实例演示[18]HttpClient处理管道
http://www.pierceye.com/news/582895/

相关文章:

  • 天津做网站优化的公司新手学做网站优化
  • 万网怎么上传网站wordpress google字体 360
  • 为什么建设的网站有时候访问慢6紫金优化网站制作
  • 如何在公司系统建网站广州短视频seo哪家好
  • 电气网站开发福安网站定制
  • 推荐一下做图文的网站html简单的个人网页代码
  • 网页新建站点网站建设缺陷
  • 移动端网站推广怎么申请pc网站域名
  • 外国男男做暧暧视频网站二级建造师考试试题
  • 普通网站建设是什么wordpress主题显示不
  • 朔州网站建设全球速卖通是什么平台
  • wordpress外贸网站好用的模板下载网站开发就业趋势
  • 长春模板建站代理网站开发嘉比格网络
  • 网站建设预算企业网站的公司和产品信息的介绍与网络营销关系
  • 网站开发的学习电子商务网站建设公
  • 网站的功能需求分析c语言网页编辑器
  • 网站投资多少钱制作做的网站如何上传网上
  • 沈阳自助建站模板网站建设想法
  • 湖南岳阳网站建设公司黄页顺企网怎样不让网站被收录
  • 有没有专门做翻译的网站安徽建设工程信息网招标公告
  • 保险咨询网站留电话中国十大网络公司排行榜
  • 领手工在家做的网站2019网页设计与实现论文
  • 兰州微信信息平台网站建设绍兴本地网站建设
  • 关于旅游网站策划书千锋前端培训多少钱
  • 温州网站建设结构做代练网站能备案
  • 零基础学习做网站第三方装修评估公司
  • 基础微网站开发动态网站彩票投注员做啥的
  • 西安做网站设计公司爱做网站免费版
  • 效果图网站接单重庆一般建一个网站需要多少钱
  • 网站建设征求意见稿辅料企业网站建设费用