【发布时间】:2014-07-11 15:19:20
【问题描述】:
我正在对我的 Android 应用程序中的一些数据进行加密,然后将其发送到 PHP 页面进行解密和处理。
使用的密码是"AES/CBC/PKCS5Padding"
现在一切正常(经过大量挖掘信息)。 但是,生成的解密数据在末尾添加了许多新行,这些行在应用程序发送的原始数据中不存在。
我假设这是 PHP 不支持 PKCS5Padding 的副作用。 假设结尾总是在字符串后面附加换行符或空格,我感到很不舒服。
如果我尝试使用mcrypt docs 中建议的代码,加密缓冲区将被清空。
是否有更好的解决方法来取消填充?
编辑:根据要求添加代码
PHP
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, "");
if($cipher === false)
{
trigger_error("AES compatible cipher missing", E_USER_WARNING);
exit;
}
$InitResult = mcrypt_generic_init($cipher, $AesPassword, $AesIv);
if($InitResult !== 0)
{
trigger_error("AES cipher init failed", E_USER_WARNING);
exit;
}
// now do the decryption
$DataBlock = mdecrypt_generic($cipher, $EncryptedBlock);
// close down mcrypt
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
安卓/Java:
String strEncrypted = null;
Cipher cipher = null;
IvParameterSpec ivSpec = null;
byte[] btEncrypted = null;
try
{
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
ivSpec = new IvParameterSpec(m_btIV);
cipher.init(Cipher.ENCRYPT_MODE, m_KeySpec, ivSpec);
btEncrypted = cipher.doFinal(strData.getBytes(m_strCharSet));
strEncrypted = Base64.encodeToString(btEncrypted, Base64.NO_PADDING | Base64.NO_WRAP);
}
catch(Exception e)
{
e.printStackTrace();
}
return strEncrypted;
注意key和iv是在Android中计算出来的,并在POST数据中传输到服务器。
这有帮助吗?
【问题讨论】:
-
你能告诉我们你的PHP代码吗?我以为我有答案,但事后看来这可能不是问题。
标签: java php android aes padding