【问题标题】:I want to implement shared secret encryption from BlackBerry to PHP我想实现从 BlackBerry 到 PHP 的共享秘密加密
【发布时间】:2011-11-21 08:46:50
【问题描述】:

黑莓应用程序中的 https 握手速度非常慢,因此我将尝试使用它们的本机加密功能通过 http 将私人数据发送到我的服务器。我可以使用一次性 https 传输向设备发送唯一的共享密钥,因此我认为这种方案相对安全,除非有人可以访问设备,但我并不担心。

我在以下 BlackBerry 文章中找到了 encrypt() 函数: http://supportforums.blackberry.com/t5/Java-Development/Use-Basic-Encryption/ta-p/445092

我一直在修改它,它似乎会产生加密输出。

问题是,我如何在 PHP 的服务器端使用 mcrypt_decrypt() 解密它?

我绝不是加密专家,所有选项都让我头晕目眩。密钥大小、块大小、块密码模式、IV等

我在这里阅读了 cmets How to write AES/CBC/PKCS5Padding encryption and decryption with Initialization Vector Parameter for BlackBerry 也许我应该在黑莓端使用 CBCEncryptorEngine。 encrypt() 示例没有指定分组密码模式,因此添加它似乎是有意义的,因为 mcrypt_decrypt() 似乎想要一个。

那么 IV 是否必须与加密数据一起发送?这似乎是必需的显然我在这里没有我的元素。

我正在用 PHP 修改这段代码:

mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $sSecretKey, $sEncrypted, MCRYPT_MODE_ECB);

但老实说,我不知道要使用什么常量以及是否需要 IV。自然是把垃圾给我了。

谁能帮我把这些碎片拼在一起?

【问题讨论】:

  • 好吧,我只是简短地看了那篇 BlackBerry 文章,但它看起来像 ECB 模式下的 AES 256 位(ECB = 电子密码本模式......你不想要那个......有看这里 -> en.wikipedia.org/wiki/… )与 pkcs5 填充...在 ECB 模式下,您不需要 IV(零就可以)...在其他模式下,您可以将未加密的 IV 发送到另一端(没有需要对值保密...)
  • 感谢您的浏览!是的,欧洲央行绝对看起来不太好。但是你怎么知道黑莓代码使用的是 ECB 呢?我的 PHP 代码中的 MCRYPT_MODE_ECB 常量来自我复制的一个示例。
  • 没有 IV,ECB 是 AES/Rijndael 的默认操作模式
  • 好的,有道理。所以看起来我随机选择了正确的常量,但为什么我的解密不起作用?
  • 糟糕,我说得太早了。我使用的代码没有选择 MCRYPT_MODE_ECB 但是当我回到使用该常量时它起作用了。试错法就这么多! :) 感谢您的反馈。

标签: php blackberry encryption java-me


【解决方案1】:

所以这里有一个官方答案,事实证明我在问题中列出的 PHP 代码实际上可以完美地解密 BlackBerry 知识库文章中 encrypt() 函数的输出。

我会考虑添加 CBC 以提高安全性,但在我的情况下这可能不是必需的,因为我发送的数据非常多变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 2011-10-28
    • 2013-10-20
    • 2018-02-28
    • 2020-09-20
    • 2011-04-06
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多