【发布时间】:2015-10-16 22:18:16
【问题描述】:
我需要在 PHP 中使用 AES-128 加密文件并在 Android 中解密。
我正在使用以下代码。我已使用 PHP 代码成功对其进行加密和解密,但我需要使用我的应用程序中的 Android 对其进行解密。
PHP 代码:
$key= "asdfghjklzxccvbn";
$in_filename = $_FILES["fileToUpload"]["tmp_name"];
$aes_filename =$target_dir."encry_".$_FILES["fileToUpload"]["name"];
$decry_filename =$target_dir."decry_".$_FILES["fileToUpload"]["name"];
//encrypt file
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = '1234567890123456';
$fin = fopen($in_filename, "rb");
$fcrypt = fopen($aes_filename, 'wb');
fwrite($fcrypt, $iv);
$opts = array('iv'=>$iv, 'key'=>$key, 'mode'=>'cbc');
stream_filter_append($fcrypt, 'mcrypt.rijndael-128', STREAM_FILTER_WRITE, $opts);
while (!feof($fin))
{
fwrite($fcrypt, fread($fin, 8192));
}
fclose($fcrypt);
fclose($fin);
我用于解密加密文件的 Android 代码:
// encripted file stored in android device for decrypt
String uri= Environment.getExternalStorageDirectory().toString();
uri=uri+"/encry_file.mp4";
File file = new File(uri.toString());
FileInputStream fis = new FileInputStream(file);
spec =getIV();
FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory().toString() + "/decrypted.mp4");
SecretKeySpec sks = new SecretKeySpec("asdfghjklzxccvbn".getBytes(),
"AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, sks, spec);
CipherInputStream cis = new CipherInputStream(fis, cipher);
int b;
byte[] d = new byte[8192];
while ((b = cis.read(d)) != -1) {
fos.write(d, 0, b);
}
fos.flush();
fos.close();
cis.close();
获取iv函数
public AlgorithmParameterSpec getIV() {
byte[] iv = { 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6 };
IvParameterSpec ivParameterSpec;
ivParameterSpec = new IvParameterSpec(iv);
return ivParameterSpec;
}
android 代码会生成一个文件,但它不可读。请检查我的代码是否正确,或者是否包含任何问题。请帮我解决它
【问题讨论】:
-
我很了解你。请具体说明..我对这件事很陌生。我应该在哪里进行更改以及更改内容
标签: php android encryption aes