问题标签 [cryptostream]

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 投票
1 回答
353 浏览

c# - 将 CryptoStream 与 StreamContent 一起使用 c#

我想从文件或 blob 存储中读取图像并将其 base64 编码为流,然后将该流传递给 StreamContent。以下代码超时:

我可以在不将文件保留为流并将其全部读入内存的情况下使以下代码工作,但我想避免这种情况。

0 投票
1 回答
1857 浏览

c# - 在 C# 中的块中将 CryptoStream 编码为 Base64 字符串

有一个方法 ( Version1 ) 可以对输入流进行编码,并且有一个函数 Decrypt() 可以成功解码编码数据。但是当输入数据很大时,可能会出现错误OutOfMemory(在“ string textEncrypted = Convert.ToBase64String (ms.ToArray()) ”这一行上)。

版本1

所以我修改了方法来逐部分(块)处理数组。这是版本2它会在Convert.ToBase64String (ms.ToArray(), offset, read)行中导致错误“偏移量和长度必须引用字符串中的位置”

版本 2

然后我做了Version3。它可以正常工作,但现在输出数据长度大于具有相同输入数据的版本 1。Decryt() 函数抛出错误“输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。”

版本 3

我的 RijndaelManaged

请帮助我摆脱错误或告诉我如何使 Version1 进程Convert.ToBase64String 部分数据

0 投票
0 回答
743 浏览

c# - C# CryptoStream FlushFinalBlock System.OutOfMemoryException

更新

我想加密一个大文件(例如超过 180 个月)。但我得到了System.OutOfMemoryExceptionFlushFinalBlock()。

这似乎是一种有价值的方法,因为它“完成”了在我的流的页眉和页脚使用附加字节加密我的数据(也许是填充?)。

有没有办法不出现此错误或使用其他方法?

这是我的代码:

0 投票
1 回答
1731 浏览

c# - 重用 ICryptoTransform 对象

我有一个用于加密文本数据的类。我正在尝试尽可能重用 ICryptoTransform 对象。但是,我第二次尝试使用同一个对象时,我得到了部分错误解密的数据。我认为第一个块是错误的,但其余部分似乎还可以(用较长的文本对其进行了测试)。

我将课程精简为以下内容:

我写了一个示例使用测试来演示这个问题:

我错过了什么?文档表明这些对象是可重用的,但我不明白如何。有人能帮助我吗?

编辑:

正如@bartonjs 指出的那样,如果我将包含上述代码的项目重新定位到.NET 4.6(或更高版本),我可以像这样使用System.AppContext.TryGetSwitch

然后我可以在主应用程序的 app.config 中设置这个开关,就像@bartonjs 的回答一样。

0 投票
3 回答
9357 浏览

c# - CryptoStream:为什么 CryptoStreamMode.Write 加密而 CryptoStreamMode.Read 解密?

让 e = 'password' 我将其转换为 CryptoStream 中的 'as9kio0736'。

让 d = 'as9kio0736' 我将其转换为 'CryptoStream 中的密码。

当我将 d 转换回“密码”时,为什么不考虑在 CryptoStream 中写入?

0 投票
1 回答
627 浏览

chunking - 填充无效且无法删除异常和要解密的数据长度无效。里金达尔

我的要求如下。步骤 1)我想通过以 10-10 MB 的块加密来在本地文件系统中写入 101 MB 的数据。

第 2 步)解密时,我想从文件中获取 10-10 MB 的数据并想解密并希望将 10-10 MB 解密后的数据传递给其他函数(注意:我的最后一个块大小为 1 MB,因为文件大小为101 MB)。

所以

1)当我尝试仅解密 10 MB 时,它会给出错误“填充无效且无法删除”

2)现在,在解密时,如果我将 paddingMode 设置为 None,那么当最后一个块出现时,即 1 MB,它会给出错误“要解密的数据长度无效”。高达 100 MB 的东西正在运行

注意:1) 最多 100 MB 的东西按预期工作。如果我给最后一个块大小 10 MB 而不是 1 MB 那么它的工作但最后我的目标文件大小将是 110 MB 而不是 101 MB。2)我在加密时没有给出填充模式,而是为了避免填充无效错误,而在解密时我没有给出它。临时我已经评论了该代码。

3)我使用相同的密钥和IV进行加密和解密

加密代码:

仅解密块并返回 byte[] 代码 - 错误

如果我将填充模式设置为零然后数据长度无效异常,则“填充无效”。

根据我的要求,我必须从这个 GetDecryptedFileContent 函数返回 byte[] 。我多次调用此函数,直到文件大小变为 0。即对于每个块。enter code here 有人可以帮帮我吗?

我只想返回 10-10 MB。

0 投票
1 回答
58 浏览

c# - C#中虚拟属性的行为

我有下一个代码:

问题是:在从文件读取操作期间,aes.IV 和 aes.Key 没有改变。

而且我只能使用赋值运算符为它们分配一个新值:

这是正确的行为吗?如果是这样,那么当我使用 fs.Read 时,我应该读取哪个内存块?

0 投票
0 回答
118 浏览

c# - CryptoStream 读取将输入流位置设置为流的末尾

全部!

我正在使用 CryptoStream 类,使用 memoryStream 进行测试。将来,我们将使用网络数据,因此流将是只读的并且 CanSeek = false。

测试数据约为 750 字节。前 250 个字节是标头,可以正常读取。第二个 250 字节是“真实”数据。第三个 250 字节是包含验证值的尾部,例如流的 hmac。

这是代码的剪辑。我在位置 250 并要求 CryptoStream.Read 获取 250 个字节。返回 250 个字节,但输入位置现在位于流的末尾。有任何想法吗?

在此先感谢您的帮助!

0 投票
0 回答
486 浏览

c# - 如何在加密流中使用缓冲区 | AES 加密

我尝试实现此代码来加密和解密流。在我实施缓冲区之前一切正常。比我尝试解密时,会引发“无效填充”错误。

有谁知道为什么会这样。还是有另一种加密/解密流和使用缓冲区的方法?

0 投票
1 回答
276 浏览

c# - ReadToEnd 缺少字符 c#

我有一个 XML 文件,其中包含有关stringConnection使用此方法解密的参数的信息:

结果将是这样的:

ReadToEnd不返回我的 XML 文件的最后一个标签,如下所示:

我的方法有什么问题?