Я работаю над проектом Java, который должен иметь аутентификацию от учетных записей, созданных на локальном веб-сайте. Пароли этих учетных записей шифруются функцией php перед вставкой в базу данных:
public function crypter($mdp){
$j = 0;
$tmp = 0;
$key = $mdp;
$res = "";
for($i = 0; $i < strlen($mdp) ; $i++)
{
$tmp = ord($mdp[$i]) + ord($key[$i]);
if($tmp > 255){
$tmp = $tmp - 256;
}
$res[$i] = chr($tmp);
if($j == strlen($key)-1){
$j = 0;
}
else{
$j = (($j % (strlen($key))) +1 );
}
}
$res = base64_encode($res);
return $res;
}
ПРИМЕЧАНИЕ. Эта функция была написана не мной, поэтому, если вы, ребята, выясните, для чего используется переменная $j
, дайте мне знать. Я также (очевидно) не могу изменить этот код.
Итак, я попытался перевести эту функцию в Java, которая дала следующее:
public String cryptMdp(String mdp){
String res = "";
String key = mdp;
int j = 0;
int tmp = 0;
for (int i = 0; i < mdp.length(); i++) {
char c = mdp.charAt(i);
char c2 = key.charAt(i);
tmp = (int) c + (int) c2;
if (tmp > 255) {
tmp = tmp - 256;
}
res += (char) tmp;
if (j == key.length() - 1){
j = 0;
}
else{
j = (j % key.length()) + 1;
}
}
return Base64.getMimeEncoder().encodeToString(res.getBytes());
}
К сожалению, они не возвращают одну и ту же строку (например, для строки a
, php возвращает wg==
, а Java возвращает w4I=
.), Хотя согласно этот вопрос это должен быть стандартом.
Ребята, вы видите, что я делаю не так?