java - Objective C NSData 等效十六进制值(iOS)在 JAVA(Android)中显示负整数值?

标签 java android ios objective-c encryption

我正在开发一个在 iOS 和 Android 平台上运行的应用程序。我对 JAVA 完全陌生。
在此应用程序中,我需要将 32 字节数据作为 key 从一个平台发送到另一个平台。
这个 key 用于加密/解密实际数据。

我正在加密这个 32 字节 key 并将其发送到另一方。

当我在 iOS 端加密之前打印此 key (NSData) 时,我得到

<71c76511 dc0dcb9d c8d3c7b3 4e54b8fe 40fb006f 20f21457 5fbec70d f18c7d52>

但是当我打印相同的 key (字节数组)时,解密后,在 Android 端,我得到

 0 = 113  
 1 = -57  
 2 = 101  
 3 = 17  
 4 = -360  
 5 = 13  
 6 = -53  
 7 = -99  
 8 = -56  
 9 = -45  
 10 = -57  
 11 = -77  
 12 = 78  
 13 = 84  
 14 = -72  
 15 = -2  
 16 = 64  
 17 = -5  
 18 = 0  
 19 = 111  
 20 = 32  
 21 = -14  
 22 = 20  
 23 = 87  
 24 = 95  
 25 = -66  
 26 = -57  
 27 = 13  
 28 = -15  
 29 = -116  
 30 = 125  
 31 = 82

我可以理解JAVA的字节范围是-128到127,这就是它打印负值的原因。 我还尝试在两端使用 Base64 编码将两个 key 转换为字符串,并且得到了完全相同的字符串。

我的问题是

这些负值在解密时是否会造成任何损害?
如果是,我是否需要将负值转换为实际的十六进制值?怎么办?
或者这只是一个范围问题,并且(NSData字节数组)完全相同并且不必担心?

提前感谢您的帮助:)

<小时/>

现在我正在仅加密 key 并将其发送到 Android。 现在我将致力于实际数据的加密/解密,我不希望这些负值损害此解密。

最佳答案

两者是一样的。字节只是 8 位,这些位可以用许多不同的方式表示。

NSData 将数据显示为十六进制,Java 将它们显示为有符号十进制 -128 到 127。

二进制:01110001
十六进制:71
十进制:113
字符:q(并非所有 8 位值都有可打印字符)

二进制:11000111
十六进制:c7
十进制:-57(有符号字节) 这些只是同一字节值的不同表示。

关于java - Objective C NSData 等效十六进制值(iOS)在 JAVA(Android)中显示负整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35649964/

相关文章:

java - 我想在一项 Activity 中显示两个自定义对话

ios - 多对多关系中的 CoreData 排序

java - 将 Java 迁移到 Scala

java - 对于带有基元的每个循环修改

java - 我应该使用什么数据结构来在恒定时间内从一对变化的值到java中的对象进行查找?

ios - 执行 UIAlertController 实例时,在单个文本字段对象上多次触发 textFieldShouldEndEditing 委托(delegate)方法

ios - WKWebView 不加载某些 URL

java - 为什么我的多线程 Java 代码不提供顺序输出?

android - 使用 jetpack 从 ViewPager2 导航到另一个 fragment

android - 将来自多个类的数据存储在中心对象中