相当于这个php crypt功能的Android

时间:2017-03-16 09:30:10

标签: php android encryption blowfish

我必须在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);

1 个答案:

答案 0 :(得分:0)

你的问题是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中已被删除。