【发布时间】:2018-05-17 08:18:52
【问题描述】:
我是一名尝试编写 Android 应用程序的 PHP 程序员。到目前为止,我做得很好......现在我被卡住了......
我在下面调用这个类来解密以前在 php 中加密的字符串。 该类可以正常发送和接收字符串,但由于未知原因,解密函数始终返回 null。
例子:
未加密文本:测试
加密密钥:SeoavcVARXhWKdQ5
加密 iv:TeoavcVARXhWKdQ5
加密文本:NnUDIfVXvtamcrYWvs9HWw==
当调用decrypt(key, iv, text) 我得到null ...
有什么帮助吗?!
import android.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AESCipher {
private static String CIPHER_NAME = "AES/CBC/PKCS5PADDING";
private static int CIPHER_KEY_LEN = 16; //128 bits
public static String decrypt(String key, String initVector, String data) {
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
Cipher c = Cipher.getInstance(AESCipher.CIPHER_NAME);
SecretKeySpec k = new SecretKeySpec(Base64.decode(key, Base64.DEFAULT), "AES");
c.init(Cipher.DECRYPT_MODE, k, iv);
byte[] decodedEncryptedData = Base64.decode(data, Base64.DEFAULT);
byte[] original = c.doFinal(decodedEncryptedData);
return new String(original);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
乐: PHP 代码加密
class AESCipher {
private static $OPENSSL_CIPHER_NAME = "aes-128-cbc";
private static $CIPHER_KEY_LEN = 16;
static function encrypt2($key, $iv, $data) {
if (strlen($key) < AESCipher::$CIPHER_KEY_LEN) {
$key = str_pad("$key", AESCipher::$CIPHER_KEY_LEN, "0");
} else if (strlen($key) > AESCipher::$CIPHER_KEY_LEN) {
$key = substr($str, 0, AESCipher::$CIPHER_KEY_LEN);
}
$encodedEncryptedData = base64_encode(openssl_encrypt($data, AESCipher::$OPENSSL_CIPHER_NAME, $key, OPENSSL_RAW_DATA, $iv));
return $encodedEncryptedData;
}
}
【问题讨论】:
-
发布 PHP 代码...
-
php 代码有效。我已经在 php 中编码/解码,一切正常。问题出在 Android 代码上
-
@HardikVasani 使用另一种加密...我正在尝试解决这个问题...无论如何...我还在 android 上加密一些东西并发送到 php...工作......问题是当我在php中加密并发送到android时,android不解密..(并且php端没问题)
-
PHP 代码仍然会有所帮助,因此我们可以看到您是如何对其进行加密的。比如你的key和你的iv看起来很相似,但是在iv上调用getBytes(),base64解码key,这就很可疑了。
标签: android