Привет друзья, помогите привести кусок кода на Java к PHP. Мои результаты различаются в плане итоговой подписи, не знаю что делать, в чем проблема.
Код на Java:
private static String bytesToStringSign(byte[] bArr) {
StringBuilder stringBuilder = new StringBuilder();
for (byte b : bArr) {
stringBuilder.append(Integer.toString((b & 255) + 256, 16).substring(1));
}
return stringBuilder.toString();
}
public static String getSign(File file, String str) throws IOException, NoSuchAlgorithmException {
InputStream fileInputStream;
Throwable th;
MessageDigest instance = MessageDigest.getInstance("SHA-1");
try {
fileInputStream = new FileInputStream(file);
try {
byte[] bArr = new byte[8192];
int read = fileInputStream.read(bArr);
while (read != -1) {
instance.update(bArr, 0, read);
read = fileInputStream.read(bArr);
}
if (read == -1) {
byte[] bytes = str.getBytes();
instance.update(bytes, 0, bytes.length);
}
String a = bytesToStringSign(instance.digest());
if (fileInputStream != null) {
fileInputStream.close();
}
return a;
} catch (Throwable th2) {
th = th2;
if (fileInputStream != null) {
fileInputStream.close();
}
throw th;
}
} catch (Throwable th3) {
th = th3;
fileInputStream = null;
if (fileInputStream != null) {
fileInputStream.close();
}
throw th;
}
}
private static String main() {
File image;
String SECRET_STRING = "qwertyuiopasdfghjklzxcvbnmqwertyuiopas";
String result = getSign(image, SECRET_STRING);
}
Реализация на PHP:
function GetImageSign($input_image) {
// получаем 8192 первых байт данных изображения
$data = substr($input_image['data'], 0, 8192);
// добавляем секретную строку
$data .= '"qwertyuiopasdfghjklzxcvbnmqwertyuiopas"';
// полученный Java Hash - db6f43a2e43eec3e3b90ed9dc17df2a409675d64
$ar = sha1($data, true);
$size = strlen($ar);
$str = '';
for ($i = 0; $i < $size; $i++) {
$str .= substr(dechex(((int)$ar[$i] & 255) + 256), 2);
}
print_r($str);
die();
}
Буду признателен за любые найденные расхождения. Спасибо.