На сервере (PHP код), мы имеем 2 метода для шифрования/дешифрования facebook идентификатор так:Как шифровать текст в Java, преобразовывая PHP-код?
private function encryptFacebookId($text)
{
$method = "AES-256-CBC";
$iv_size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted = openssl_encrypt($text, $method, $this->_cryptKey, 0, $iv);
return base64_encode($iv . $encrypted);
}
public function decryptFacebookId($text)
{
$text = base64_decode($text);
$method = "AES-256-CBC";
$iv_size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CBC);
$iv = substr($text, 0, $iv_size);
$decrypted = openssl_decrypt(substr($text, $iv_size), $method, $this->_cryptKey, 0, $iv);
return $decrypted;
}
с _cryptKey = "1231238912389123asdasdklasdkjasd";
Это нормально с тем же значением ввода и вывода на сервере. Но когда я подключаюсь к серверу как клиент (Android/Java) по запросу HTTP (REST). Я пытаюсь преобразовать метод PHP-кода в Java-код по методу «encryptFacebookId ($ text)» и отправить текст шифрования на сервер, но результат метода decryptFacebookId ($ text) на сервере не совпадает с клиентом.
Это мой код на клиенте
String facebookId = "123456789";
String keyCrypt = "1231238912389123asdasdklasdkjasd";
try {
SecretKeySpec skeySpec = new SecretKeySpec(keyCrypt.getBytes(),
"AES");
Cipher enCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] ivData = new byte[enCipher.getBlockSize()];
IvParameterSpec iv = new IvParameterSpec(ivData);
enCipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encryptedBytes = enCipher.doFinal(facebookId.getBytes());
String ivEncrypted = new String(ivData)
+ new String(encryptedBytes);
String strEncode = Base64
.encodeBase64String(ivEncrypted.getBytes());
System.out.println(strEncode);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Пожалуйста, помогите мне найти правильный путь.
Возможно, [это] (http://stackoverflow.com/questions/10451068/encryption-mismatch-between-java-and-php) может помочь вам – mrun
Для начала вы не можете преобразовать двоичный байт []: new String (encryptedBytes). – Metatron
Ваш PHP-код - большой беспорядок. Почему вы смешиваете функции mcrypt_ * и openssl_ *? AES имеет 128-битный блок/IV размер не 256. Почему CAST? –