2012-03-21 2 views
1

У меня проблема с AES-шифрованием, и клиент показал мне свой код сервера PHP для «дешифрования». Любопытно, что точный код был взят из S.O. (неудивительно). Я нашел это, потому что код, который прошел у меня, имел тот же самый комментарий! :)Как перенести эту строку PHP на Java?

В любом случае, это фрагмент кода PHP, взятый из this S.O. вопрос.

Я пытаюсь сделать то же самое с Java, но я не знаю, что это точная линия добавляет:

$key = 'a16byteslongkey!'; 

$padded_key = $key . str_repeat(chr(0x00), 16); // Argh! 

(! Обратите внимание на комментарий // Argh был не мой;)

Он пытается добавить chr (0x00), чтобы сделать 32-байтный ключ (потому что ключ $ равен 16?), Если да, как бы я сделал то же самое в Java?

+0

@ Джош, может быть, мне следовало бы уточнить: что такое chr (0x00) в php? –

+0

В PHP строки являются двоично-безопасными (каждый «символ» в строке на самом деле является просто байтом), но экземпляры Java «String» не являются (они фактически представляют символы, а не байты). Для двоичных ключей шифрования вы, вероятно, не должны использовать объекты 'String', а скорее' byte [] 'или что-то вроде класса Key. –

+0

@ Другой код Действительно, спасибо за разъяснение. Оказывается, клиент делает «взломанную» вещь на стороне сервера, заполняя ключ 16 байтов с 16 нулями, поэтому он добавляет 32 ... после заполнения фиксированного ключа 16 «нулями» все это сработало. ;) –

ответ

2

Как Гарет сказал это возвращает символ с ASCII-кодом 0. С помощью этого мы можем сделать функцию, которая повторяет строку:

public static String strRepeat(String toRepeat, int reps){ 
    //Sanity checks go here! 
    StringBuilder sb = new StringBuilder(); 
    for(int x = 0; x < reps; x++){ 
     sb.append(toRepeat); 
    } 
    return sb.toString(); 
} 

Теперь линия может быть заменена:

String paddedKey = key + strRepeat('\0', 16); // Argh! 
+0

+1 за соблюдение комментария;) –

1

chr(0x00) должен вернуть символ с кодом ASCII 0 который, я думаю, может быть представлен '\0' в Java.

+0

Спасибо Гарет, что помогло. –

Смежные вопросы