我必须在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);
答案 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中已被删除。