【问题标题】:Objective C NSData equivalent hexadecimal values (iOS) shows negative integer values in JAVA (Android)?Objective C NSData等效十六进制值(iOS)在JAVA(Android)中显示负整数值?
【发布时间】:2016-02-26 10:59:58
【问题描述】:

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

我正在加密这个 32 字节的密钥并将其发送到另一端。

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

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

但是当我打印相同的密钥(字节数组),解密后,在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 编码将两个键都转换为字符串,我得到了完全相同的字符串。

我的问题是

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

提前感谢您的帮助:)


现在我正在使用仅加密密钥并将其发送到 Android。 现在我将处理实际数据的加密/解密,我不希望这些负值损害这个解密。

【问题讨论】:

    标签: java android ios objective-c encryption


    【解决方案1】:

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

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

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

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

    【讨论】:

    • zaph:感谢您写下答案。我已经使用此密钥解密了实际数据,并且得到了正确的结果。这意味着两个演示文稿都是一样的。再次感谢您!
    猜你喜欢
    • 2015-02-11
    • 2014-03-31
    • 2014-11-30
    • 1970-01-01
    • 2015-07-11
    • 2012-01-29
    • 2013-02-26
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多