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

c# - 写入文件时如何散列文件流?

在 C# 中,我使用 Filestream 写入新文件。然后我对这个文件进行哈希处理以获取 SHA256 哈希值,以便稍后进行验证。我想删除这个额外的文件读取,并在流式传输时简单地散列文件。

我已经查看了 CryptoStream 和其他示例,但不清楚如何让普通文件流写入新文件并在读取时获取哈希。这可能吗,如果可以,怎么办?

0 投票
1 回答
55 浏览

c# - 通过 File() 返回 Stream 会导致未来的操作抛出“进程无法访问文件路径,因为它正在被另一个进程使用”

为了在将文件返回给客户端时减少内存使用,在解密时,我们使用了流。这一直很好,直到出现一个怪癖,即当您将相同的文件上传回服务器时(例如,当客户端修改它时)。它会导致 .net 核心抛出“该进程无法访问文件路径,因为它正被另一个进程使用”。

由于该系统仍在开发中,我不确定在调试模式而不是发布模式下运行应用程序是否是一种怪癖。尽管我将代码构建到版本中,但仍然收到相同的错误。

据我所知,返回流是如何工作的,它应该自动处理流。

创建流的第一个方法包含以下内容:

然后,解密方法执行以下操作:

然后调用加密方法:

这会将链返回到返回以下内容的控制器:

当我开发这个时,似乎在使用中包装任何这些都会导致对象处理异常,但是我可能做错了什么。

有谁知道如何解决这样的问题?

0 投票
1 回答
266 浏览

c# - 来自 C# 的 crypto-js DES 解密

我有一个使用 DES 加密的 C# 加密方法。我需要在我正在创建的 node.js api 中解密该值。我已经设法在 api 中重新创建了大部分解密方法,但是当我传入秘密和要解密的值时,我得到了不同的结果。

加密.cs

这是我继承的代码,到目前为止,我已经设法重新创建:

应用程序.js

秘密的散列过程是我能够重新创建的,并且我已经确认 api 中的值与方法输出trunc的字节数组相同。HashKey

但是,当我使用var bytes = CryptoJS.DES.decrypt(decoded, key, { iv: key });它进行简单加密时,会给出与 C# 方法不同的加密值,我认为这就是解密失败的原因。

我发现了一些东西,但我不确定如何解决是,当我传递密钥的值和要解密的值时,它们需要是字符串,但是在 C# 版本中,CryptoStream 需要一个字节数组,所以我必须做是将要解密的值作为字符串传递,我不确定这是否有效。密钥也是如此,DESCryptoServiceProvider接受密钥和 iv 作为字节数组,但是当我转换 crypto-js 截断数组时,它只是转换字节数组的文字文本。我目前正在尝试使用以下方法进行转换:

我错过了这个过程中的一个步骤,我错过了什么吗?

0 投票
1 回答
77 浏览

.net - 处理 CryptoStream 是否会刷新最后一个块?

从 Microsoft .NET API 可以提取以下信息:

  • using将调用执行IDisposable.Dispose()
  • IDisposable.Dispose()应该调用Flush()任何Stream实例;
  • CryptoStream.Close()会打电话CryptoStream.FlushFinalBlock()

然而,这似乎在规范中留下了一个空白:处理一个CryptoStream实例也会调用CryptoStream.FlushFinalBlock(),如果是这样,这在哪里记录?