【问题标题】:Password-based encryption for Android and iOS适用于 Android 和 iOS 的基于密码的加密
【发布时间】:2014-04-10 18:23:03
【问题描述】:

我正在开发一个具有原生 Android 和原生 iOS 实现的 IM 应用程序。所需功能之一是能够通过输入普通密码字符串来加密消息。然后必须通过输入此密码来解密这些消息。我还被告知要“使用 AES”。

我已经尝试过几乎成功的计划是获取密码字符串,用一些我知道永远不会改变的上下文信息对其进行加盐,然后使用 MD5 之类的东西生成一个固定长度的密钥。我知道这不是超级安全。

要解密,我在上面重复,我得到相同的密钥。然后,我使用该密钥解密数据,并取回原始数据。

我让它在 Android 和 iOS 上运行,但它们无法解密彼此的数据,这告诉我可能存在我看不到且无法更改的实现差异。两个平台上的 AES128 加密数据的前 16 个字节总是相同的,但之后就完全不同了。我可以检查什么?

明确地说,用户体验与使用密码共享 zip 文件的体验相同。用户可以随时从任何设备输入密码,然后 BAM,他们将获得未加密的数据。共享密钥文件或任何此类内容不是其中的一部分。

【问题讨论】:

    标签: android ios encryption aes


    【解决方案1】:
    1. 没有必要使用任何盐(至少我看不出有任何理由)
    2. AES 是一种标准 - 无论实施什么,结果都是一样的。
    3. 前 128 位的相同输出和不同的其余数据意味着您使用不同的密码模式 AES 是块密码,您可能在两个平台上都使用 128b 块大小的它,因此第一个块以相同的方式加密并且下一个用不同的密钥加密。请阅读更多关于block cipher modes

    【讨论】:

    • 我在 Android 上没有通过 IV,没有它它也能正常工作。一旦我给它提供了与 iOS 上相同的 IV(全部为 0x0),它就会产生相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2021-06-21
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多