Использует ли Википедия различные методы для вычисления хеш-части пути к изображению? - PullRequest
1 голос
/ 05 декабря 2011

Я использую dbpedia extract_framework (ImageExtractor # getImageUrl), чтобы получить URL-адрес изображения (md5 первых двух символов)

   val md = MessageDigest.getInstance("MD5")
   val messageDigest = md.digest(fileName.getBytes)
   val md5 = (new BigInteger(1, messageDigest)).toString(16)

   val hash1 = md5.substring(0, 1)
   val hash2 = md5.substring(0, 2);

   val urlPart = hash1 + "/" + hash2 + "/" + fileName

В большинстве случаев функция работает правильно, но нав некоторых случаях это неверно:

Для "Stewie_Griffin.png" я получаю 2/26 / Stewie_Griffin.png, но реальный - 0/02 / Stewie_Griffin.png

Источникинформация о файле находится здесь: http://en.wikipedia.org/wiki/File:Stewie_Griffin.png http://upload.wikimedia.org/wikipedia/en/0/02/Stewie_Griffin.png

Есть идеи, почему иногда не работает схема хеширования?

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Ответ OQ на ваш вопрос в списке рассылки MediaWiki API кажется правильным:

val md5 = (new BigInteger(1, messageDigest)).toString(16)

Когда вы преобразуете его в BigInt, он съедает ведущий ноль. Не уверен, почему, когда AFAIK MessageDigest предоставляет метод toString ()

0 голосов
/ 19 февраля 2013

Просто подведем итог: чтобы вычислить путь к изображению из Википедии, вам нужно использовать org.apache.commons.codec.digest.DigestUtils # md5Hex:

String md5 = DigestUtils.md5Hex(image);
System.out.println(md5.substring(0, 1) + "/" + md5.substring(0, 2) + "/" + image);
...