У меня есть метод Java, который хэширует строку с солью.
Я хотел бы перейти на PHP, но я не могу понять, как API Java делает это. Как эта функция будет выглядеть в PHP?
MD5:
public String doHash(String s, String salt) {
try {
final MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.reset();
if (salt != null && !salt.isEmpty()) {
md5.update(salt.getBytes());
}
byte[] array = md5.digest(s.getBytes());
StringBuilder hexData = new StringBuilder();
for (int i = 0; i < array.length; ++i) {
hexData.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
}
return hexData.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
SHA512:
public String doHash(String s, String salt) {
try {
final MessageDigest sha512 = MessageDigest.getInstance("SHA-512");
sha512.reset();
if (salt != null && !salt.isEmpty()) {
sha512.update(salt.getBytes());
}
byte[] data = sha512.digest(s.getBytes());
StringBuilder hexData = new StringBuilder();
for (int byteIndex = 0; byteIndex < data.length; byteIndex++) {
hexData.append(Integer.toString((data[byteIndex] & 0xff) + 0x100, 16).substring(1));
}
return hexData.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
Задача ещё не решена.
Других решений пока нет …