问题标签 [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 投票
2 回答
1358 浏览

php - C# 到 PHP AES 解密

嗨,我有 c# 代码示例,但我无法将其转换为 php。我试图重写代码,但我做不到。在我的项目中,其他服务器使用 c# 加密数据,我必须使用 PHP 对其进行解密。

我有密码和盐值。

这里是 C# 代码包括加密和解密功能。

我的 php 代码在这里,但我认为我完全错了。

0 投票
1 回答
6567 浏览

c# - 通过 Rfc2898DeriveBytes 的密码哈希 - 传递给 getBytes 的内容

我正在使用 Rfc2898DeriveBytes 来散列密码。

但是,我不确定将什么传递给需要 int 的 GetBytes 方法。

我应该传递什么价值,为什么?

0 投票
1 回答
1102 浏览

c# - RFC2898DeriveBytes 未解密

我在使用 RFC2898DeriveBytes 时遇到了一些问题。情况如下:我正在使用 RSACryptoProvider 创建一个公钥/私钥对,并使用 Rfc2898 来加密私钥文件。我正在使用以下代码进行加密:

这是为了解密:

现在的问题是,当我得到 decPrivateKeyXml 时,除了前几个单词之外的所有单词都是正确的。前几句话只是打乱了:

我不知道代码有什么问题......

0 投票
1 回答
323 浏览

c# - 使用相同用户名哈希不同盐的密码

我们为我们的网站引入了密码加密。盐的计算如下所示:

对于大多数用户名,盐总是相同的。但是对于某些用户名,它在每次通话时都会改变。有人能告诉我我们做错了什么吗?

0 投票
1 回答
232 浏览

security - 让 Rfc2898DeriveBytes 计算盐

我在这里阅读了很多关于 Rfc2898DeriveBytes() 的帖子,似乎在所有这些帖子中,盐都是预先计算好的并传递给构造函数。但是,有一个构造函数接受盐长度输入,并且会为您计算盐。之后可以在 Salt 属性中使用它。

让该方法计算盐有什么缺点吗?就我而言,用途是用于密码散列。

0 投票
2 回答
1566 浏览

c# - 为什么 hash_pbkdf2 (PHP) 的输出与 .NET / C# 实现不同

在我的一个小项目中,我需要计算一个函数的哈希值。

我有一个 PHP 哈希的工作示例

它们都有相同的输出:523d904c8f2df96634d9eed3b444838e

现在我需要我的代码向后兼容生成的 C#,因为密码将由 PHP 服务器验证。并且请求将由 C# 应用程序发送。

这是我尝试过的:输出=8e59ead5f90c6af11cf80641d51c241c

0 投票
1 回答
809 浏览

.net - 使用输入密码但不加盐破解 Rfc2898DeriveBytes 密钥

我正在使用 C# RijndaelManaged 类进行 AES 加密。密钥和 IV 是使用 Rfc2898DeriveBytes 类从输入密码和盐生成的。我的问题是,如果有人获得了输入密码而不是盐,那么破解加密有多难?

0 投票
4 回答
7964 浏览

javascript - JavaScript:如何像 C# 一样生成 Rfc2898DeriveBytes?

编辑:根据评论中的讨论,让我澄清一下这将发生在服务器端,在 SSL 后面。我不打算向客户端公开散列密码或散列方案。

假设我们有一个现有的 asp.net 身份数据库,其中包含默认表(aspnet_Users、aspnet_Roles 等)。根据我的理解,密码哈希算法使用 sha256 并将 salt +(哈希密码)存储为 base64 编码字符串。编辑:这个假设是不正确的,请参阅下面的答案。

我想用 JavaScript 版本复制 Microsoft.AspNet.Identity.Crypto 类的VerifyHashedPassword函数。

假设一个密码是welcome1,它的asp.net哈希密码是 ADOEtXqGCnWCuuc5UOAVIvMVJWjANOA/LoVy0E4XCyUHIfJ7dfSY0Id+uJ20DTtG+A==

到目前为止,我已经能够重现获取盐和存储的子密钥的方法部分。

C# 实现或多或少地这样做:

我在 JavaScript 中有以下内容(无论如何都不优雅):

同样,它并不漂亮,但在运行此代码段后,saltbytes 和 storedSubKeyBytes 逐字节匹配我在 C# 调试器中看到的 salt 和 storedSubkey。

最后,在 C# 中,Rfc2898DeriveBytes 的一个实例用于根据所提供的盐和密码生成一个新的子密钥,如下所示:

这就是我卡住的地方。我已经尝试过其他的解决方案,例如这个,我分别使用了 Google 和 Node 的 CryptoJS 和加密库,我的输出从来没有生成任何类似于 C# 版本的东西。

(例子:

生成“LSJvaDM9u7pXRfIS7QDFnmBPvsaN2z7FMXURGHIuqdY=")

我在网上找到的许多指针都表明存在编码不匹配的问题(NodeJS / UTF-8 与 .NET / UTF-16LE),因此我尝试使用默认的 .NET 编码格式进行编码,但无济于事。

或者我可能完全错误地认为这些库正在做什么。但是,任何指向正确方向的指针都将不胜感激。

0 投票
1 回答
418 浏览

c# - C# bcrypt 和 pbkdf2 验证密码功能的区别

根据this reference source code,函数SlowEquals

我得到了作者的观点,即使用 xor & 或将比较时间设为

一致,但现在我对BCrypt的密码感到很困惑

验证,是否需要做同样的事情来避免时序攻击?

或者bcrypt在散列后已经调整为一致?

所以它只是用“==”验证结果?

关于此的任何想法或文件/文章?谢谢。

0 投票
1 回答
284 浏览

c# - 在没有原始输入的情况下递增 Rfc2898DeriveBytes IterationCount

网上很多与Rfc2898DeriveBytes相关的文档都建议每两年增加一次迭代次数。我正在为应用程序设计一个新的数据库结构,以包含每个用户的哈希和盐的迭代次数。确保所有密码在两年内更新到新的迭代计数的最佳方法是什么?Rfc2898DeriveBytes 构造函数只接受密码作为输入,而不接受哈希。我对编写自己的函数有点谨慎,但是可以选择使用 HMACSHA1 重新散列吗?或者如果他们有旧的迭代,我是否只需要等待所有用户登录并重新哈希他们?