问题标签 [rijndaelmanaged]

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 回答
3645 浏览

c# - Rijndael:相同的字符串,不同的结果

我们有一个小型桌面应用程序,现在需要作为 Web 功能提供(.Net)。这个应用程序包含一些加密代码,并使用 .Net 框架中的 Rijndael 类。该代码接受输入字符串,对其进行加密并将结果写入文件。由于所有代码都包含在一个类中,因此我只是将该类复制到我的 Web 服务应用程序中。当我在原始应用程序和新应用程序中使用相同的密钥加密相同的字符串时,结果是不同的。原始应用程序给出的结果字符串是我的 Web 服务给出的结果字符串的子集。后者在加密字符串的末尾有附加字符。

下面是我正在使用的代码。请注意,我没有开发此代码,也没有完全理解它。关于行为差异的任何想法?请帮忙!!

这是获取用户输入并调用加密器的代码。

这是加密器代码:

设置 IV 值的代码:

0 投票
1 回答
1401 浏览

c# - 为什么我不能在 MonoTouch 上使用一个加密器加密多个字符串?

在将数据从 iPad 应用程序发送到 WCF Web 服务之前,我正在使用以下(精简的)类来加密一些数据。

当我在服务器和 iPad 上运行以下代码时,都打印相同的加密字符串。

但是,当我尝试加密第二个值时,服务器和 iPad 上的结果是不同的。

当我在服务器上解密偏离的 iPad 结果时,解密字符串的一部分是 gibberish。来自服务器的加密结果正确解密。

FlawedAlgorithm如果我为每个调用创建一个新实例,问题就不会显现出来,例如:

这使我认为问题出在所涉及对象的状态中。我检查了方法中的buffer变量,实例Encrypt(string)产生的值是正确的。UTF8Encoding这意味着该encryptor领域(或其底层实现)是罪魁祸首

当我开始改变第一个加密值的大小时,我可以看到第二个加密调用结果的变化。这可能意味着流的某些部分没有被正确清除或覆盖。但是FlawedAlgorithm该类使用的流不是其状态的一部分;它们在每次方法调用时重新创建。而且该encryptor对象看起来不像管理自己的流的类型。

有没有其他人遇到过类似的问题?RijndaelManaged班级有问题吗?或者 MonoTouch 中是否存在一些流和内存管理缺陷,与这个密码学示例无关?

PS:我已经在 iPad 和 iPad Simulator 上测试过了;两者都表现出这种奇怪的行为。

0 投票
1 回答
1211 浏览

c# - 如何更改加密密钥并仍然能够解密旧数据?

我需要在 C# 中创建一个对称密钥并使用它来加密一个字符串,我最终会将其存储在数据库中。我会使用 .Net 中的 AES 机制来实现这一点。我会使用相同的密钥来解密加密的数据。

现在我的要求是,如果我有改变密钥的机制。如何确保我可以使用新创建的密钥来解密用旧密钥或过期密钥加密的字符串?

0 投票
1 回答
503 浏览

encryption - 是否需要初始化向量才能解密我的数据?

我正在使用 RijndaelManaged 来加密和解密数据。我很可能误解了初始化向量的意义,但我发现如果我在解密数据时将其设置为不同的值,除了前 16 个字符之外的所有字符仍然可以正确解密。这是预期的行为吗?

0 投票
4 回答
66933 浏览

vb.net - VB.Net中的简单加密/解密

我试图弄清楚如何在 VB.Net 中加密/解密字符串。

我按照此处给出的示例编写了以下代码(如下)。有一个文本框、一个“加密”按钮和一个“解密”按钮。这个想法是在文本框中输入一些东西(“like 'hello world'”),单击“加密”,然后看到加密版本出现在文本框中。然后单击“解密”应将您带回原始字符串。

但是当我尝试加密时,当我尝试“FlushFinalBlock”时出现错误。错误是:“要加密的数据长度无效”。

“解密”部分完全是在黑暗中拍摄,因为上面引用的示例仅处理加密,而不是解密。我确定这是错误的,但由于我无法“加密”工作,我还没有测试它。

谁能告诉我为什么这不起作用?

0 投票
1 回答
895 浏览

c# - 为什么我不能使用 RijndaelManaged 解密数据?

我正在开发一个像信使一样发送和接收消息的程序,我需要在发送按钮上加密消息并在收到消息时解密消息。我正在使用RijndaelManaged类和以下方法来加密/解密

以下是我如何调用以前的方法:

问题是解密加密异常时出现异常-要解密的数据长度无效,我不知道为什么?

0 投票
1 回答
1174 浏览

c# - 如何使用 javascript slowAES 将加密文本从 C# 发送到 PhantomJS 脚本?

我的服务器上有一个在 PhantomJS 中运行的脚本,我需要将密码作为命令行参数传递给脚本。对于那些不熟悉 PhantomJS 的人来说,它是一个无头 webkit 浏览器,运行服务器端,无需客户端交互。

为了将密码加载到 PhantomJS 中的虚拟网页对象的上下文中,它需要存储在包含在特定网页对象中的 javascript 文件中。密码文件将只保留足够长的时间以登录并将被删除。我有一个故障安全机制,可以在脚本不再需要文件后删除它。我不希望此密码以纯文本形式存储,因此我想使用 AES 加密。

密码将使用 AES 加密存储在我的数据库中。我知道以这种方式存储密码不是最安全的方法,但脚本需要知道密码,因此哈希不是一种选择。

我将在我的 ASP.NET MVC3 Web 应用程序中从 C# 调用此 PhantomJS 脚本,并且我想使用 AesManaged 或 RijndaelManaged 从 C# 传递加密密码。我对密码学有了基本的了解,并设法让一些代码在 C# 和 javascript 中工作。但是,当我从 C# 加密文本时,我无法使用 javascript 对其进行解密。以下是我的一些 C# 代码示例:

javascript代码使用slowAES实现:

这段 javascript 代码只是设置,所以我可以快速测试加密和解密。在 C# 和 javascript 之间进行加密和解密之后,我将把密码作为来自 PhantomJS 的命令行参数进行处理。

关键和IV是:

运行文本“test”的加密后,C# 代码的输出如下:

这是javascript的输出:

我已将 PKCS7 填充应用于 C# 代码,因为 slowAES 使用 PKCS7 填充。我什至尝试过使用我自己的 PKCS7 填充实现,但仍然没有得到相同的结果字节数组。如果我遗漏了什么,请告诉我。非常感谢。

0 投票
1 回答
3079 浏览

c# - Rijndael/AES 解密 C# 到 PHP 转换

我在 C# 中有以下代码

此代码片段解密某个文件并输出解密版本。在 RijndaelManaged 的​​ CreateDecryptor 方法中,我使用密码作为 KEY 和 IV。

我在 PHP 的 stackoverflow 上找到了一些代码,但是如果我尝试给密钥和 iv 提供与 C# 中相同的字节数组,则不会发生任何事情。

我真的需要一些帮助如何在 PHP 中正确创建代码。我不需要在 PHP 中输​​出文件,一个字符串就足够了。

更新:默认的 C# RijndaelManaged 密码方法是 AES-128-CBC。我将我的 PHP 代码更改为那个 mcrypt 模块(默认 C# 密码方法

更新 2: 我确实设法创建了一个 Java Decryptor,这让我想到了另一件事。PHP 必须使用 PKCS7 填充。

0 投票
1 回答
991 浏览

.net - 如何找到用于对我的数据进行 AES 加密的初始化向量 CAPICOM?

我有一个用 Classic ASP 编写的应用程序,它通过 CAPICOM 加密数据并将其存储在数据库中。加密代码看起来像这样(经典的 ASP,VB。为简洁起见稍微简化了一点):

现在,我有一个 .NET 应用程序需要读取这些数据并对其进行解密。在使用该类之前,我已经在 .NET 中完成了与 AES 兼容的加密/解密RijndaelManaged,我希望我可以使用相同的方法来解密这些数据。但是,我不知道如何让它与 CAPICOM 的加密数据一起使用,因为RijndaelManaged在调用时需要您传递一个密钥和一个初始化向量RijndaelManaged.CreateEncryptor,而 CAPICOM 不采用初始化向量。我假设 CAPICOM 必须使用初始化向量,但不公开它。我怎样才能找到那个向量?

0 投票
2 回答
1356 浏览

c# - 使用 StreamReader 访问解密的 Rijndael 加密文件而不写入磁盘

我目前正在研究嵌入在 .dll 文件中的纯文本文件的加密/解密。纯文本文件是脚本,并在需要时被解析。

目前,这是(纯文本)脚本文件的加载方式:

RunScript 方法将脚本的单行读入字符串,然后对其进行解析。它依次查看每一行,并在找到时执行我们在脚本中定义的每个动作。

由于无论如何都不会对输出的 dll 文件进行加密,因此我们决定在将每个脚本文件嵌入到 dll 之前对其进行加密。我们决定使用 Rijndael 算法,因为它可以在 C#/.NET 中轻松实现。

当前加密运行如下:

这意味着解密是运行一些命令并获取解密文件的问题......除了,因为其余代码的设计(加密似乎是“一旦我们让系统运行到给定标准”),文件需要作为 StreamReader 对象返回。目前,这就是我解密请求文件的方式:

有谁知道我如何使用 Rijndael 解密文件,但可以将输出作为 / 读取到 StreamReader 对象的实例中?

我在 Internet 上进行了很长时间的查看,以寻找执行此操作的方法,而我最接近的方法是将 decryptReader 的内容复制到另一个 StreamReader 对象中,而不是解密为字符串,但似乎您无法复制的内容一个 StreamReader 到另一个 StreamReader - 如果我错了,请纠正我。

我希望尽可能少地更改现有的(我没有在这里分享的)代码库,因为这可能会导致错误出现。我也很乐意在不将文件写回磁盘的情况下执行此操作(显然,我们加密它们是有原因的)。

提前谢谢你,如果我不够清楚或有点模糊,对不起。如果您需要帮助我,我可以添加更多信息。

杰米