Зашифровать Стинг в JSP ... Расшифровать в PHP - PullRequest
0 голосов
/ 21 апреля 2009

Мне нужно создать страницу рукопожатия в php, которая будет принимать строку запроса, зашифрованную для функции в Java / JSP, и расшифровывать ее в PHP для использования в приложении.

Я считаю, что это хорошая отправная точка http://propaso.com/blog/?cat=6, но она шифрует в PHP и расшифровывает в PHP, в противоположность тому, что мне нужно сделать.

Кто-нибудь знает общие шифры в PHP / JSP для использования. По ссылке выше кажется, что CBC - это ответ, код ниже:

PHP Cipher / Mode:

$cipher     = "rijndael-128";
$mode       = "cbc";

и JSP-шифр:

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");

Кто-нибудь знает хорошую ссылку, которая поможет мне перевернуть этот процесс и зашифровать его в JSP и расшифровать в PHP.

Спасибо

Ответы [ 2 ]

2 голосов
/ 21 апреля 2009

Вам необходимо иметь IV, который не является предсказуемым для данного сообщения. Жесткое кодирование IV делает его предсказуемым. Таким образом, вам нужно найти способ передать IV с зашифрованным текстом. Хотя в отличие от ключа IV не нужно хранить в секрете.

Блочный шифр работает с блоком открытого текста фиксированного размера. Если у вас недостаточно открытого текста для ввода, он должен быть дополнен таким образом, чтобы получатель мог отличить заполнение от данных. Связанный пример полностью игнорирует это, и это ошибка. Если используется CipherOutputStream, частичный конечный блок будет безболезненно обрезан из зашифрованного текста. Если объект Cipher используется напрямую, частичный блок вызовет метод doFinal для исключения. Вместо этого используйте что-то вроде PKCS5Padding.

Правильный пример Java будет примерно таким:

SecretKey secret = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters param = cipher.getParameters();
/* In addition to ciphertext in "cos", recipient needs IV. */
byte[] iv = param.getParameterSpec(IvParameterSpec.class).getIV();
CipherOutputStream cos = new CipherOutputStream(output, cipher);
byte[] buf = new byte[2048];
while (true) {
  int n = input.read(buf, 0, buf.length);
  if (n < 0)
    break;
  cos.write(buf, 0, n);
}
cos.flush();

Где JSP получает открытый текст для шифрования? Как вы хотите, чтобы JSP форматировал вывод (включая IV)?

0 голосов
/ 21 апреля 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...