【问题标题】:Equivalent Android to this php crypt function相当于Android这个php crypt函数
【发布时间】:2017-03-16 09:30:09
【问题描述】:

我必须在 Android 上生成与此 php 函数相同的加密密钥: 我已经测试了很多方法(参数密码实例),但我从来没有相同的结果。 我们如何在 android 上重现以下功能?

PHP:

$data = str_pad($string_to_encrypt, 16, "0", STR_PAD_RIGHT );
    $data = pack('H' . strlen($data), $data);


    $iv = str_pad("0123456789ABCDEF", 16, "0", STR_PAD_RIGHT );
    $key = str_pad("01234567", 8, "0", STR_PAD_RIGHT );

    $key = pack('H' . strlen($key), $key);
    $iv = pack('H' . strlen($iv), $iv);


        //ciphermode, key, data, mode, iv
    $baDataCiphered=mcrypt_cbc (MCRYPT_BLOWFISH, $key, $data, MCRYPT_ENCRYPT, $iv);

    return strToHex($baDataCiphered);

【问题讨论】:

  • 您从 php 端或 android 端收到此错误?
  • php 有效。我必须在 android 端做同样的地穴
  • Blowfish、DES 和 AES 是完全不同的分组密码。请不要混淆他们。

标签: php android encryption blowfish


【解决方案1】:

您的问题是 AES 不支持 8 字节密钥,它只支持 16、24 和 32 字节。

当您提供 8 字节密钥 01234567

所以您需要将您的密钥长度(可能会将其填充)更改为 16 个字节。

AES 是 Rijndael 的变体,具有 128 位的固定块大小, 以及 128、192 或 256 位的密钥大小。

在这种情况下,您将面临DES 的新问题,它只支持 8 字节的密钥长度。

密钥名义上以 8 个字节存储或传输,每个字节为奇数 平价。

但作为替代方案,您可以改用 ThreeDES,它使用 8*3 (24) 密钥长度,我认为它不会与 AES 冲突。


但是,您需要记住 mcrypt_cbc 函数的弃用。

警告

这个函数在 PHP 5.5.0 中被弃用,在 PHP 7.0.0 中被移除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多