PasswordDeriveBytes 与 Rfc2898DeriveBytes,已过时但速度更快

2024-02-27

我正在开发基于从 SymmetricAlgorithm 继承的类(例如 TripleDes、DES 等)的加密功能。

基本上有两个选项可以为我的算法类生成一致的密钥和 IV,PasswordDeriveBytes and Rfc2898DeriveBytes,两者都继承自 DeriveBytes 抽象类。

The PasswordDeriveBytes.GetBytes()该方法在 .NET 框架中被标记为已过时,而建议使用 Rfc2898DeriveBytes.GetBytes(),因为它符合 PBKDF2 标准。但是,根据我的测试,调用相同的GetBytes()Rfc2898DeriveBytes 类中的方法几乎比 Rfc2898DeriveBytes 类中的方法慢 15 倍PasswordDeriveBytes类,这会导致意外的 CPU 使用率(始终高于 50%)。

以下是一些测试数据:

  • 迭代次数:100
  • 算法类型:DES
  • 原文:“我是测试密钥,请加密我”
  • Time:
    • 密码衍生字节:99ms
    • Rfc2898DeriveBytes:1,373ms

根据测试,性能较差Rfc2898DeriveBytes在生产环境中是不可接受的。

以前有人注意到这个问题吗?有什么解决方案可以让我仍然使用标准解决方案而不影响性能?使用过时的方法有任何风险(可以在未来版本中删除)吗?

多谢你们!

Edit:

可能我找到了问题所在......默认迭代计数PasswordDeriveBytes是 100,而对于Rfc2898DeriveBytes是1000。我将它们更改为与1000相同的数字后,执行Rfc2898DeriveBytes只是双倍时间。


它们不是同一件事。

Rfc2898DeriveBytes 是 PBKDF2 的实现。 PasswordDeriveBytes 是 PBKDF1 的实现。 PBKDF2 使用不同的方法生成不同的输出,并且比 PBKDF1 的轮数要多得多。

诸如此类的用于密钥派生的密码散列函数应该很慢。这就是重点——这使得它们更难破解。

这两个函数不兼容,并且PasswordDeriveBytes 不太安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PasswordDeriveBytes 与 Rfc2898DeriveBytes,已过时但速度更快 的相关文章

  • 为什么我应该更喜欢单个“await Task.WhenAll”而不是多个等待?

    如果我不关心任务完成的顺序 只需要它们全部完成 我是否仍然应该使用await Task WhenAll而不是多个await 例如 是DoWork2下面是一个首选方法DoWork1 为什么 using System using System
  • SignalR .Net Core 3.1 Web 应用程序无法在本地 IIS 上运行

    尝试使用 ASP Net Core 3 1 和 Angular 基于在线示例创建聊天 以下内容在 IIS Express 上运行良好 但在本地 IIS 上运行不佳 错误信息 WebSocketTransport js 85 WebSocke
  • 无法使用 Visual Studio 2013 中的 F5 进行调试,模块窗口为空

    我正在尝试使用调试程序启动外部程序在 Visual Studio 2013 中 所有项目文件都是 NET 3 5 顺便说一句 自从更新到VS2013 大约两周 以来我就这样调试过 但今天突然停止工作了 当我运行该程序时 它会启动 但是调试
  • 将 .NET 小数存储到 MySQL 中的最佳字段定义是什么?

    我需要将小数存储到 MySQL 中 它可以具有不同的精度 因此我很想知道哪种 MySQL 字段类型绝对等同于 NET 的字段类型decimal http msdn microsoft com en us library system dec
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • Activator.CreateInstance 性能严重下降的案例

    我们在 NET 服务器端应用程序中观察到一个有趣的行为 CPU 内存密集型工作会随着时间的推移而减慢 我们使用 PerfView 尝试找到罪魁祸首 看来Activator CreateInstance是这一个 我们是怎么找到它的 我们在新会
  • 使用 Youtube .net API 上传视频并将其设置为不公开

    net 的 Youtube API 似乎有一段时间没有更新了 因此 没有公开的属性或方法可以将视频设置为不列出 如果有人以前遇到过这个问题 可以建议解决方法吗 我也很难弄清楚这一点 所以我想我会将我的发现发布给任何寻求此问题答案的人 As
  • 自动修补程序(高效自动更新程序)

    我想要一个自动更新程序 可以检测修改的文件 通过比较客户端和服务器上的文件 并仅下载修改的文件 我还希望它能够给我生动的状态 在进程栏或其他东西上显示它 该场景是网络中有大约一千个客户端 它们使用相同的应用程序 如果应用程序有新版本可用 他
  • 使用内部构造函数实例化类

    我有一个类 其构造函数被定义为内部 这意味着我无法实例化它 虽然这可能有道理 但出于调试和研究目的 我仍然愿意做一次 是否可以通过反射来做到这一点 我知道我可以访问私有 内部成员 但是我可以调用内部构造函数吗 或者 由于构造函数没有做任何重
  • TypeAccessException:尝试通过方法...访问类型...失败

    完整的异常详细信息是 System TypeAccessException occurred Message Attempt by method DynamicClass System Text StringBuilder System O
  • Visual Studio 2015 RTM - 调试不起作用

    我已经安装了 VS 2015 RTM 仅此而已 并且无法调试任何解决方案 无论它是现有解决方案还是全新解决方案 使用 VS 2015 创建并针对 Net Framework 4 6 编译 它只会打开一个VS 中的新选项卡称为 中断模式 其中
  • 如何查找包含nunit测试的dll文件

    我有一个包含许多 dll 的文件夹 其中之一包含 nunit 测试 标有 Test 属性的函数 我想从 C 代码运行 nunit 测试 有什么办法可以找到正确的dll吗 谢谢 您可以使用程序集加载文件 http msdn microsoft
  • 任务取消最佳实践

    假设我有一个处理器 其工作是将文件保留回磁盘 这是作为Task当观察一个BlockingCollection
  • 使用 Windbg 调试 .NET 转储

    我对 NET 进程进行了转储 使用 ma 选项和 procdump exe 中的高 CPU 触发器 并且希望在正在运行的线程中查看有关我的代码正在执行的操作的线索 我明白了 procdump ma c 65 s 2 n 3 service
  • 如何延长SQL查询的超时时间

    这不是连接超时 因为与数据库的连接正常 问题是我调用的存储过程花费的时间超过 30 秒 并导致超时 该函数的代码如下所示 SqlDatabase db new SqlDatabase connectionManager SqlConnect
  • 保持树视图的滚动位置

    如何在 NET 应用程序中维护树视图控件的滚动位置 例如 我有一个树视图控件 并经历了向其中添加各种节点并将它们固定在底部的过程 在此过程中 我可以滚动树视图并查看不同的节点 问题是当该过程完成时 树视图滚动到最底部 看来调用 treeno
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • .NET 表适配器:获取与填充?

    在处理数据库中的数据 强类型或其他方式 时 我似乎总是使用 Get 并且我从未真正需要使用 Fill 尽管在提取和更新数据时我可以轻松地使用 Fill 而不是 get 任何人都可以提供有关每种方法的含义和陷阱的指导吗 在什么情况下最好使用其
  • 在 Jscript 中实例化 System.Threading.Thread 对象

    我正在尝试使用 Jscript 创建一个新的 System Threading Thread 对象 但我无法让构造函数工作 如果我只是执行以下操作 var thread new Thread threadFunc function thre
  • 当“多次安装 MSBuild”时,Dotnet 项目转换尝试转换失败

    try convert w Test csproj target framework netstandard2 0 结果是 Multiple installs of MSBuild detected please select one In

随机推荐

  • 删除 XDocument 中的所有评论

    我正在阅读 XDocument 如何从 XDocument 中删除所有注释行 我尝试过 doc DescendantNodes Where x gt x NodeType XmlNodeType Comment Remove 但这仅删除带有
  • ASP.NET MVC 3:需要部署哪些 dll?

    在未安装 ASP NET MVC 3 的服务器上部署 ASP NET MVC 3 应用程序时 哪些文件需要将 复制本地 标记为 True From http www hanselman com blog BINDeployingASPNET
  • 使用 iTextSharp 将块的一部分右对齐

    我是 iTextSharp 新手 我正在尝试创建 PDF 只是一个简单的例子 如果我做这样的事情 Paragraph p new Paragraph p Add new Chunk 789456 Test f5 newDocument Ad
  • 无法使用 MSSQL 在 PDO 中引用表名

    我必须使用某人的数据库来开发游戏 遗憾的是该游戏有一个名为 User 或 dbo User 的表 并且无法重命名 现在 我需要在 PHP 中使用 PDO 访问它 并且当我使用此查询时 query SELECT UserId AS INTUS
  • 在 C++ 文件 CDT 中包含 Python.h

    如果这是一个愚蠢的问题 我深表歉意 但我尝试用谷歌搜索这个 但找不到任何可以指引我正确方向的东西 我只是想了解我需要做什么来 设置 cdt 以 理解 我的 python h 包含内容 错误的说法是这样的 include
  • 确保派生类构造函数必须调用特定基类方法

    在 C 03 类中 我有一个成员变量 它must在对象构造期间被赋值 但是 只有派生类可以计算所需的值 正如这篇文章中所讨论的C 是否要求从派生类初始化基类成员 https stackoverflow com questions 12169
  • 有效地计算组合和排列

    我有一些代码来计算排列和组合 并且我正在努力使其更好地处理大量数字 我找到了一种更好的排列算法 可以避免大量的中间结果 但我仍然认为我可以在组合方面做得更好 到目前为止 我已经提出了一个特殊情况来反映 nCr 的对称性 但我仍然希望找到一种
  • WHERE col IN 以空数组作为参数的查询

    从例子where col in 示例 https github com vitaly t pg promise wiki Learn by Example where col in values and 这个答案 https stackov
  • 初始化的数组是否保留其顺序?

    假设我初始化一个数组有点像这样 int anArray 100 200 300 400 500 600 700 800 900 1000 是否保证元素始终按照我在初始化时输入的顺序插入 例如 100 200 300 400 500 600
  • Android Play 计费库:获取产品介绍价格?

    我正在研究使用新的播放计费库 https developer android com google play billing billing library html 我关心的一件事是产品介绍价格 我想知道是否有办法检索新图书馆的介绍价格
  • 如何将多个 gsoap 客户端 Web 服务编译为一个可执行文件?

    I using gSOAP对于网络服务 但我有一个问题必须 将 2 个 Web 服务编译成一个可执行文件 还有一些 函数具有相同的名称 而不是使用参数 函数名称的其他前缀 编译错误 X o In function soap get stri
  • C 中的文件结束符 - EOF

    你输入什么来结束程序 1 不起作用 include
  • 在 Google 可视化中单击按钮后绘制图表

    我试图弄清楚如何在单击按钮后绘制图表 我的代码似乎有问题 我使用 Google 可视化和 Javascript 来完成此活动 有人可以看一下吗 CODE
  • 使用 jQuery .attr 或 .prop 设置属性值不起作用

    我创建了一个按钮 其属性名为 loaded 初始值为 no 单击按钮后 我正在运行一些 ajax 并在最后尝试将 已加载 属性设置为 是 以便如果用户多次单击该按钮 ajax 就不会再次运行 我有这样的事情 http jsfiddle ne
  • 滚动条在 WebView 的

    我有包含滚动分区的 Html 文件 当我在 WebView 中添加此 HTML 时 它不会显示该 div 的滚动条 我在 Html 文件中有代码 some Html code table style border 3px solid bla
  • Xcode4 与 Mac OS X 10.4 SDK

    在 Xcode 的最新版本 Xcode 4 0 中 不再包含 10 4 SDK 但是 我仍然需要支持 10 4 和 PowerPC 版本 我已经安装了最新的 Xcode 3 2 6 它仍然包含 10 4 支持 然后我安装了Xcode4 有没
  • 使用 C# 向 USB 连接的 GPRS 调制解调器发送 AT 命令

    任何人都可以给我一个关于如何访问连接到 USB 端口的 GPRS 调制解调器的良好指示或指南 我应该为我的程序制作一个 USB 驱动程序以将 AT 命令发送到调制解调器吗 或者就像一个路由器 我可以使用IP地址访问它 谢谢 如果 Windo
  • JTable 计算正在使用的行数并返回该数字

    我正在做一个小项目 停车场表 它允许您添加 删除和搜索汽车 除此之外 它还意味着返回已经停放的汽车数量 我的问题是 如何编写一个代码来计算已使用的行数并返回正在使用的行数 大概通过按钮或通过标签自动更新 注意 抱歉造成混乱 import j
  • 如何检查命令是否可用或存在?

    我正在 Linux 上用 C 语言开发一个控制台应用程序 现在 它的可选部分 不是必需的 取决于可用的命令 二进制文件 如果我检查system 我越来越sh command not found作为不需要的输出 并将其检测为存在 那么我该如何
  • PasswordDeriveBytes 与 Rfc2898DeriveBytes,已过时但速度更快

    我正在开发基于从 SymmetricAlgorithm 继承的类 例如 TripleDes DES 等 的加密功能 基本上有两个选项可以为我的算法类生成一致的密钥和 IV PasswordDeriveBytes and Rfc2898Der