C# 无符号字节加密到 Java 有符号字节解密

2023-12-09

我有一个 C# 加密应用程序我的部分文件(因为它们是大文件)使用 RijndaelManaged。因此,我将文件转换为字节数组并仅加密其中的一部分。

然后我想使用Java解密该文件。所以我必须解密仅文件的一部分(指那些字节)在 C# 中加密。

问题来了。因为在 C# 中我们有无符号字节在 Java 中我们有有符号字节。所以我的加密和解密不能按我想要的方式工作。

在 C# 中,我将加密字节和普通字节连接在一起,并将它们保存为File.WriteAllBytes。所以我不能使用sbyte在这里或者我不知道该怎么做:

byte[] myEncryptedFile = new byte[myFile.Length];
for (long i = 0; i < encryptedBlockBytes.Length; i++)
{
   myEncryptedFile[i] = encryptedBlockBytes[i];
}
for (long i = encryptedBlockBytes.Length; i < myFile.Length; i++)
{
   myEncryptedFile[i] = myFileBytes[i];

}

File.WriteAllBytes(@"C:\enc_file.big", myEncryptedFile);

(Java中有完全相同的解密代码)

所以我的问题是:

  • 有没有写入所有字节 in C#?
  • 或者我可以使用无符号字节在Java中?
  • 或者还有其他方法可以解决我的问题吗?

尽管不能在 Java 中使用无符号字节,但您可以忽略该问题。

AES - 以及所有现代对称密码 - 对字节进行操作,并且输入和输出已定义为字节(或八位字节)。输入和输出已由 NIST 标准化,并且可以使用测试向量。

如果您查看字节的单独位内容,则{200,201,202}在 C# 中和{(byte)200, (byte)201, (byte)202}在Java中是相同的。这是因为 Java 使用二进制补码表示字节。

拿号码200作为整数:这将是11010000以二进制表示,表示数字-56在 Java 中,如果在两个补码中用于(有符号)字节。现在对称密码将简单地将这些位转换为另一个位(通常使用完整的block位)。

一旦你检索到答案,你会发现它们在 C# 和 Java 中是相同的当你查看各个单独的位时。然而,C# 会将它们解释为无符号值,而 Java 会将其解释为有符号值。

如果你想在 Java 中打印或使用这些值作为有符号数,那么你必须将它们转换为正有符号整数。执行此操作的方法是使用int p = b & 0xFF.

这将执行以下操作(我将再次使用数字 200):

  1. (负)字节值扩展为有符号整数,记住符号位:

    11010000变成11111111 11111111 11111111 11010000

  2. 该值被“屏蔽”为0xFF or 00000000 00000000 00000000 11111111通过执行二元 AND 运算符:

    11111111 11111111 11111111 11010000 & 00000000 00000000 00000000 11111111 = 00000000 00000000 00000000 11010000

该值与值相同200作为有符号整数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 无符号字节加密到 Java 有符号字节解密 的相关文章

随机推荐

  • shell 脚本中 HERE 文档中的引号

    G day 我在使用 shell 脚本时遇到语法错误 如下所示 ssh root mm user vm lenny lt
  • 在 mysqli 中插入许多值的最佳方法?

    我正在寻找一种 SQL 注入安全技术 可以使用 PHP 和 MySQLi 一次插入大量行 约 2000 行 我有一个数组 其中包含必须包含的所有值 目前我正在这样做 I t
  • DataSet 不支持 C# 中的 System.Nullable<> 异常

    public partial class Form2 Form public Form2 InitializeComponent private void Form2 Load object sender EventArgs e RST D
  • Laravel 说“路线未定义”

    在我的routes php 中我有 Route patch preferences id UserController update 在视图文件 account preferences blade php 中我有 Form model Au
  • Python 2.5.2 的 lower() 和 upper() 是否遵循 Unicode?

    我正在制作一个 Google AppEngine 应用程序 Python 2 5 2 运行时环境是否遵循 Unicode 标准 例如 unicode 对象上的 lower 和 upper 方法 是的 也不是 有关示例 请参阅此处讨论的代码
  • Swift 语言中的感叹号是什么意思?

    Swift 编程语言指南有以下示例 class Person let name String init name String self name name var apartment Apartment deinit println na
  • 是否可以在各种失败情况下(例如异常)在程序终止之前使 std::cout 自动刷新

    如果引发异常 则缺少刷新的标准输出会使诊断问题变得更加困难 有什么可以使用的缓解措施吗 例如 终止挂钩 编译器标志等 我可以理解 在段错误中 刷新可能非常困难 但我认为对于任意线程中未捕获的异常 它至少在理论上应该是可能的 注意 由于可能使
  • Selenium 调试:元素在点 (X,Y) 处不可单击

    我试着刮这个site通过硒 我想单击 下一页 按钮 为此我这样做 driver find element by class name pagination r click 它适用于许多页面 但不适用于所有页面 我收到此错误 WebDrive
  • 开玩笑: toBeInstanceOf(Object) 失败

    只是检查我们是否正在导出对象失败 如下所示 import as Foo from foo describe Foo gt test should export an object gt expect Foo toBeInstanceOf O
  • 基于字符向量重新排序数据框

    我认为这应该非常简单 但我找不到办法做到这一点 我想根据一个因素重新排序数据框 到目前为止我能找到的所有答案都提供了逻辑排序 但这是任意的 并且是数字和字母的混合 也许这是一个问题 因为它是factor not a vector 但向量的答
  • 在Python中获取音频输入设备列表

    如何使用 Python 以这种格式获取 Linux 中的音频输入设备列表hw 0 1 我已经使用 pyaudio 尝试了以下操作 def getaudiodevices p pyaudio PyAudio print p get defau
  • 如何构建netty-transport-native-epoll-4.0.32.Final-linux-x86_64.jar?

    我在 netty 中使用本机 epoll 传输 并且能够从存储库下载 netty transport native epoll 4 0 32 jar 不过我还需要 netty transport native epoll 4 0 32 Fi
  • Xamarin 跨平台证书固定

    我正在使用 Xamarin 设计一个应用程序 我想通过使用证书固定来提高我们的安全性 但我找不到办法做到这一点 我可以使用 android 的本机方法来做到这一点 但我想知道是否有跨平台的解决方案 甚至是 Windows Phone 的解决
  • 在 Web 应用程序中创建和下载巨大 ZIP(来自多个 BLOB)的最佳实践

    我需要从我的 Web 应用程序执行大量文件下载 显然 这将是一个长期运行的操作 它将被用于每年一次 每个客户 所以时间不是问题 除非超时 但我可以通过创建某种形式的 keepalive 心跳来处理 我知道如何创建一个隐藏的iframe并与它
  • 以编程方式将应用程序添加到 Windows 防火墙

    我有一个通过 ClickOnce 安装和更新的应用程序 该应用程序通过 FTP 下载文件 因此需要添加为 Windows 防火墙的例外 由于 ClickOnce 的工作方式 EXE 的路径会随着每次更新而变化 因此异常也需要更改 对防火墙进
  • bash-求行中数字的平均值

    我正在尝试逐行读取文件并找到每行中数字的平均值 我收到错误 expr non numeric argument 我已将问题范围缩小到 sum expr sum i 但我不确定为什么代码不起作用 while read a rows do fo
  • 如何安排 C# Windows 服务每天运行一个方法? [复制]

    这个问题在这里已经有答案了 可能的重复 如何安排 C Windows 服务每天执行任务 我正在创建一个 C Windows 服务 但我没有找到让计时器每天在 App Config 文件中指定的特定时间触发方法的最佳方法 例如 每天早上 6
  • 运行libsandbox

    我目前正在开发一个在线 C C 汇编编译器 我偶然发现了一个名为 libsandbox 的好软件 这使我能够运行在线编写的代码 对其进行编译并拦截系统调用 如果有 首先 我对 Linux 环境还是个新手 我已经下载了 tar gz 解压它
  • Facebook Login Graph API 返回错误的个人资料图片 URL

    我通过调用使用 Facebook 图形 API它返回我期望的 json 响应 像这样的东西 id 1234567890987654321 email xxxxxx u0040example com name xxxx xxxx first
  • C# 无符号字节加密到 Java 有符号字节解密

    我有一个 C 加密应用程序我的部分文件 因为它们是大文件 使用 RijndaelManaged 因此 我将文件转换为字节数组并仅加密其中的一部分 然后我想使用Java解密该文件 所以我必须解密仅文件的一部分 指那些字节 在 C 中加密 问题