使用mcrypt加密/解密二进制mp3,缺少mimetype

时间:2012-03-19 01:18:57

标签: php mime-types binaryfiles mcrypt

我有一个读取mp3文件并对其进行加密的脚本,我希望能够解密此文件并将其转换为base64,以便它可以在html5中播放。

密钥1将存储在页面上并且静态,key2对于每个文件都是唯一的,用于我使用的测试:

$key1 = md5(time());
$key2 = md5($key1.time());

这是我的编码php代码:

//Get file content
$file = file_get_contents('test.mp3');
//Encrypt file
$Encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key1, $file, MCRYPT_MODE_CBC, $key2);
$Encrypt = trim(base64_encode($Encrypt));
//Create new file
$fileE = "test.mp3e"; $fileE = fopen($file64, 'w') or die("can't open file");
//Put crypted content
fwrite($fileE, $Encrypt);
//Close file
fclose($fileE);

这是不起作用的代码(解码文件大小相同,但没有mimetype):

//Get file content
$fileE = file_get_contents('test.mp3e');
//Decode
$fileDecoded = base64_decode($fileE);
//Decrypt file
$Decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key1, $fileDecoded, MCRYPT_MODE_CBC, $key2);
$Decrypt = trim($Decrypt);
//Create new file
$file = "test.mp3"; $file = fopen($file, 'w') or die("can't open file");
//Put crypted content
fwrite($file, $Decrypt);
//Close file
fclose($file);

1 个答案:

答案 0 :(得分:1)

我猜你指向错误的文件看看这段代码:

$fileE = "test.mp3e"; $fileE = fopen($file64, 'w') or die("can't open file");

然后检查您尝试解密的文件:

$fileE = file_get_contents('test.mp3e');

我认为你的文件名有误。不确定无法看到变量$ file64的值是什么。虽然您已将$ fileE值上的文件名值指定为“test.mp3e”,但它仍会获得您在$ file64上定义的内容。 :)