问题标签 [rfc2898]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
29401 浏览

asp-classic - 如何使用 AES 在 VBScript 中加密?

我希望使用特定密钥和IV值在VBScript中使用Rijndael/AES加密一些数据。有什么好的函数库或 COM 组件可以很好用吗?

我看了看CAPICOM;它只允许使用密码,并且不允许设置特定的密钥和 IV 值。

0 投票
4 回答
6410 浏览

c# - Java 等效于 C# 的 Rfc2898DerivedBytes

我想知道是否有人试图做相当于

在爪哇。其中 secret 是一个字符串(密码),而 saltValueBytes 是字节数组中的盐。

我已经尝试过一些东西,但似乎无法理解它。

0 投票
4 回答
16497 浏览

c# - 使用 Rfc2898DeriveBytes 在 C# 中实现 PBKDF2

伙计们,我正在尝试在 C# 中实现一个 PBKDF2 函数,该函数创建一个 WPA 共享密钥。我在这里找到了一些:http: //msdn.microsoft.com/en-us/magazine/cc163913.aspx似乎产生了一个有效的结果,但它的一个字节太短了......而且 PSK 值错误。

为了测试输出,我将其与此进行比较:http ://www.xs4all.nl/~rjoris/wpapsk.html或http://anandam.name/pbkdf2/

我确实找到了一种方法来让它与一个名为 Rfc2898DeriveBytes 的 C# 内置库一起工作。使用它,我得到一个有效的输出:

现在,我使用 Rfc2898DeriveBytes 的一个限制是“盐”必须是 8 个八位字节长。如果它更短,则 Rfc2898DeriveBytes 会引发异常。我在想我所要做的就是将盐(如果它更短)填充到 8 个字节,我会很好。但不是!我已经尝试了几乎所有填充与较短盐的组合,但我无法复制从上面这两个网站获得的结果。

所以底线是,这是否意味着 Rfc2898DeriveBytes 根本无法与短于 8 字节的源盐一起工作?如果是这样,是否有人知道我可以使用为 WPA 预共享密钥实现 PBKDF2 的任何 C# 代码?

0 投票
3 回答
18985 浏览

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

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

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

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

以下是一些测试数据:

  • 迭代次数:100
  • 算法类型:DES
  • 原文:“我是测试密钥,请给我加密”
  • 时间:
    • PasswordDeriveBytes:99 毫秒
    • Rfc2898DeriveBytes:1,373 毫秒

根据测试,Rfc2898DeriveBytes生产环境中的不良性能是不能接受的。

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

多谢你们!

编辑:

可能我发现问题出在哪里了……默认的迭代计数PasswordDeriveBytes是100,而forRfc2898DeriveBytes是1000。在我将它们更改为与1000相同的数字后,执行Rfc2898DeriveBytes时间只有两倍。

0 投票
3 回答
3608 浏览

security - 公共覆盖函数 GetBytes() 因为 Byte() 已过时

诗人试图表达什么?

公共覆盖函数 GetBytes() 由于 Byte() 已过时:Rfc2898DeriveBytes 替换 PasswordDeriveBytes 以从密码中获取密钥材料,并且在新应用程序中是首选。

我要不要换这个...

...什么?

0 投票
2 回答
8986 浏览

c# - RFC2898DeriveBytes 如何生成 AES 密钥?

我看到了一些类似的代码

我可以看到密钥是由带有密码和盐的 Rfc2898DeriveBytes 生成的。然后 AES 通过 GetBytes 检索密钥。

但问题是,RFC2898DeriveBytes 是做什么的,key.GetBytes(cb) 是做什么的?谁能详细说明一下?我无法从文档中得到它。

0 投票
1 回答
51679 浏览

c# - 为什么我需要使用 Rfc2898DeriveBytes 类(在 .NET 中)而不是直接使用密码作为密钥或 IV?

使用 Rfc2898DeriveBytes 和仅使用 有什么区别Encoding.ASCII.GetBytes(string object);

我在这两种方法上都取得了相对成功,前者是一种更冗长的方法,而后者则简单明了。两者似乎都允许你最终做同样的事情,但我很难看出使用前者而不是后者的意义。

我能够掌握的基本概念是,您可以将字符串密码转换为字节数组以用于例如对称加密类,AesManaged. 通过 RFC 类,但您可以在创建 rfc 对象时使用盐值和密码。我认为它更安全,但充其量仍然是一个没有受过教育的猜测!此外,它还允许您返回一定大小的字节数组,以及类似的东西。

这里有几个例子可以告诉你我来自哪里:

或者

'rfcKey' 对象现在可用于在对称加密算法类上设置 .Key 或 .IV 属性。

IE。

'rj' 应该准备好了!

令人困惑的部分......所以除了使用'rfcKey'对象之外,我可以不只使用我的'myPassInBytes'数组来帮助设置我的'rj'对象吗?

我曾尝试在 VS2008 中执行此操作,但直接答案是否定的。但是对于为什么使用 RFC 类而不是我上面提到的其他替代方法,你们有更好的教育答案吗?

0 投票
2 回答
1848 浏览

security - 盐是否需要随机来保护密码哈希?

我对安全性知之甚少(我需要找到基础知识的基本解释),并试图提出一种合理的方法来使用 .Net 将用户密码存储在数据库中。

这是我目前的解决方案:

我将 HashPassword() 的结果存储在数据库中。要检查用户的密码,我这样做:

我的问题是盐是否需要像这样随机存储在数据库中,或者我是否可以生成一个 10 字节的盐并将其存储在我的代码中,并始终使用相同的盐来保存自己将盐存储在数据库中存储密钥?

此外,如果有人看到我正在做的任何其他问题,我将不胜感激任何建议。

0 投票
1 回答
4928 浏览

java - Java 中的 RFC2898DeriveBytes 实现

作为我们项目的一部分,我必须解密用 C# 加密的字符串。此解密使用 AES 算法和打包模式作为 PKCS7 完成。为了生成初始化向量,他们使用了以下内容:

salt 是默认字节。

该 IV 用于使用 AES 加密字符串。

我通读了一些文档,发现AES可以用Java实现。但不确定如何通过 IV 和打包模式。

此外,我还看到有 CBC、ECB 模式用于提及密码块模式。我不确定 C# 对应项中使用的是什么模式。

下面是 C# 中的代码

任何人都可以帮助我在 Java 中创建等价物吗?

0 投票
1 回答
3343 浏览

java - 如何将此 C# 加密函数转换为 Java?

我需要将以下 C# 代码翻译成 Java,但是,我找不到任何与 C# 的 Rfc2898DerivedBytes 和 Rijndael 等效的 Java。

[更新]

我需要使用这个函数来加密新创建的用户的密码,并且加密的密码也应该被包括 C# 在内的其他调用者正确解密。

我按照评论和答案中列出的文档,并尝试在下面写简单的示例以快速验证。

}

但是,密文的长度是48,但实际上在C#中,看起来是这样的格式

WHUNV5xrsfETEiCwcT0M731+Ak1jibsWEodJSaBraP1cmmkS1TpGWqwt/6p/a7oy8Yq30ImZPbFF+Y0JNLa3Eu2UGuazZtuhEepUIIdaDEtA2FO0JYIj2A==

共 120 个字符。

代码有问题吗?