【发布时间】:2018-03-05 08:00:09
【问题描述】:
这个问题可能与问题here 重复,但我需要有关该主题的更多信息。我的伙伴(android)和我(ios)正在尝试交换一些数据,这是一个身份密钥。该密钥是通过 Signal Protocol 的 curve25519 包装器生成的。密钥由公钥和私钥组成。密钥是定义here as ECKeyPair 的类型。现在我想将 publicKey 作为 NSData 相互传输,将 iOS 读取到 Android,反之亦然。下面列出了所采取的方法和产生的问题。
在 iOS 中,尝试将 data(publicKey) 设为 base64 编码字符串并使用 json 序列化传输到 Android,但 android 无法正确解码 base64 字符串。我觉得这是因为在将密钥转换为 base64 时,数据大小以某种方式发生了变化,例如,当我打印数据时,大小总是超过它应该的 32 个字节。检查数据验证的算法拒绝来自 Android 实现中的公钥,说该密钥不是有效数据。
尝试通过转换为 ByteArray 将公钥从 Android 传输到 iOS。从 Android 创建的字节数组由有符号整数组成,我无法调用
Data(bytes: <Array<UInt8>>),因为它适用于无符号整数。当我尝试将其转换为有符号整数时,会导致类似于上述第一点的有效性检查失败。
这个问题here 中描述了一个几乎相似的场景。所以我想知道以下内容。
- 为什么某些数据在特定平台(如 iOS)中采用 base64 编码,但在其他平台(如 Android)中解码时会有所不同。
- 为什么 iOS 无法成功读取 Android 操作系统创建的 ByteArray。还是我弄错了?如果是这样,请指导我。
- 在这种特殊情况下,如何在 iOS 和 Android 之间成功传输数据?我熟悉像图像或文件这样的普通数据传输,但它只是不适用于我的加密数据。我知道 ProtoBuff,为了可行性,我更喜欢 json 或类似的。
添加一些可能有用的细节。
- iOS 生成的公钥
-
Android 生成的公钥。
[12,-55,99,72,15,-101,99,-13,99,-56,-47,19,-21,90,-17,-39,-119,-33, 44,-87,-18,-24,-53,-29,-100,34,-60,69,-61,24,8,92]。
请注意 iOS 和 Android 之间的符号差异。
感谢任何帮助。 谢谢你
如您所见,数据被丢弃为 BadKey 类型。我通过 Base64Encoding 将数据从 iOS 传输到 Android 到字符串。
【问题讨论】:
-
一篇文章有很多问题。你为什么不从一个问题开始?例如将字节数组从 Android 传输到 iOs?与加密或密钥无关的东西。
-
我试图解释我的情况,以便更清楚。我的要求是,如果它将字节数组从 iOS 传输到 android,它还必须通过加密算法的验证。希望我很清楚。
-
是的,你很清楚。你已经很清楚了。你看我的评论了吗?
-
实际上,您根本不清楚,因为您没有提供有关问题所在的信息。说“...但是 android 无法正确解码 base64 字符串...”不是有用的信息。如果有错误消息,请将该消息与相关代码一起包含在内。如果出现异常,请包括完整的堆栈跟踪以及相关代码。我不了解 iOS,但 Android 上的 Java 类旨在与使用标准格式的其他平台进行互操作。
-
我已经编辑了我的帖子,当我尝试调用类的构造函数时,在 Android 上添加了异常。它未能通过数据的验证检查。
标签: android ios encryption cryptography