Метод шифрования, который реализован как для php, так и для java?

Мне нужно передать некоторые строки из сервлета Java в скрипт php. Какие существуют опции для шифрования строк? Мне нужен метод, который реализуется как для java, так и для php (например, caesar cipher …). Есть ли какой-либо стандартный метод шифрования, который я должен получить для библиотеки java и php?

Я хочу зашифровать строки на стороне java, перейти к php-скрипту, а затем позволить скрипту php расшифровать их.

Я не могу использовать https из-за ограничений используемого провайдера.

благодаря

Надеюсь, это поможет вам начать. Отсутствует обработка ошибок, а секретный ключ жестко закодирован. Оба из них должны быть рассмотрены для кода качества продукции. Со стороны Java вы можете использовать Java Cryptography Architecture (JCA) :

import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.DatatypeConverter; public final void testTesting() throws Exception { final String plainText = "plain text"; final String result = encrypt(plainText); System.out.println(result); } public String encrypt(final String plainText) throws Exception { final byte[] data = plainText.getBytes("UTF-8"); final byte[] encoded = encrypt(data); final String result = new String(encoded); return result; } public byte[] encrypt(final byte[] data) throws Exception { // this is just an example key, real code should use a properly generated shared secret final byte[] secret = new byte[] {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}; final SecretKeySpec key = new SecretKeySpec(secret, "AES"); final Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); encryptCipher.init(Cipher.ENCRYPT_MODE, key); final byte[] iv = encryptCipher.getIV(); final byte[] encrypted = encryptCipher.doFinal(data); final int outputLength = encrypted.length; final int ivLength = iv.length; final byte[] results = new byte[outputLength + ivLength]; System.arraycopy(iv, 0, results, 0, ivLength); System.arraycopy(encrypted, 0, results, ivLength, outputLength); return DatatypeConverter.printBase64Binary(encoded); } 

С PHP-стороны вам понадобится Mcrypt .

 <?php $key = base64_decode('KioqKioqKioqKioqKioqKg=='); $input = base64_decode($_GET['input']); $plain_text = substr($input, 16); $initialization_vector = substr($input, 0, 16); echo pkcs5_unpad(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $plain_text, MCRYPT_MODE_CBC, $initialization_vector)); function pkcs5_unpad($text) { $pad = ord($text{strlen($text)-1}); if ($pad > strlen($text)) { return false; } if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) { return false; } return substr($text, 0, -1 * $pad); } ?> 

Функция pkcs5_unpad была скопирована здесь, так как кажется, что PHP Mcrypt не включает поддержку дополнения PKCS5. Код Java префикс данных с вектором инициализации, используемым для его шифрования. Впоследствии код PHP разбивает его на два, вектор инициализации и зашифрованные данные.

Этот код использует 128-битный AES ( Rijndael ) в режиме CBC, который должен быть достаточно безопасным для большинства целей. В дополнение к простому шифрованию я рекомендую использовать HMAC, как описано здесь, чтобы гарантировать, что данные не подделаны. Для выполнения HMAC в Java используйте класс Mac . Для PHP см. Mhash .

Jasypt ( http://www.jasypt.org/ ) будет использовать любой алгоритм, который вы хотите. Должна быть способна реализовать любой из обычных альго в течение нескольких минут.

Посмотрите расширение mcrypt для PHP. Один из них почти наверняка существует на Java.

Большинство стандартных алгоритмов шифрования доступны как на PHP, так и на Java.

Посмотри на:

  • PHP mcrypt
  • Безопасность Java SE

Как вы можете видеть, обе они поддерживают как минимум DES, TripleDES, RC2.