【发布时间】: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