Здесь Хэш-код используется для ограничения приложений, так что только действительные приложения (имеющие этот хэш-код, соответствующие данному сертификату) могут обращаться к услугам facebook. Поскольку все приложения подписаны с определенными сертификатами, поэтому все загруженные приложения (скажем, 1000 пользователей загружают его) под одним и тем же сертификатом должны иметь один и тот же хэш-код, и facebook может отслеживать, какое сертифицированное приложение использовало его услуги.
Мы можем легко найти хэш-код сертификата следующим кодом:
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.hellofacebook",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
Выше мы используем SHA (Secure Hash Algorithm) для создания хэш-код сертификата.
SHA (Secure Hash Algorithm) - это алгоритм обработки сообщений, который принимает входное сообщение любой длины и выдает 160-битный вывод в качестве дайджест сообщения. SHA называется безопасным, потому что невозможно вычислить сообщение, соответствующее данному дайджесту сообщения, или найти два разных сообщения, которые создают один и тот же дайджест сообщений.
Поэтому, прежде чем сделать какой-либо реальный запрос на Facebook сервер, первый хэш ключа сертификата сравнивается с ключом хранится хэш (т.е. развитие хэш-ключ или ключ отладки хэш) на сервере, и если они совпадают только тогда мы можем продолжить дальше.
проверить мой инструмент для окон и osx здесь http://stackoverflow.com/questions/4388992/key-hash-for-android-facebook-app/17732453#17732453 – Shahar