Băm chính cho ứng dụng Android-Facebook


229

Tôi đang làm việc trên một ứng dụng Android, trong đó tôi muốn tích hợp tính năng đăng bài trên Facebook. Tôi đã tải xuống SDK Facebook-Android và tôi đã có readme.md (tệp văn bản) trong đó, trong đó nó được đề cập để tạo ra hàm băm chính cho Android. Làm thế nào để tôi tạo ra nó?


2
bạn có thể kiểm tra liên kết này javatechig.com/2012/12/10/ khăn
Nilanchal

2
kiểm tra cái này Đối với những người vẫn đang đối mặt với vấn đề,
Chintan Khetiya

Tạo HashKey cho chế độ gỡ lỗi và phát hành bằng cách sử dụng này. stackoverflow.com/questions/7506392/
Mạnh

Để lấy chìa khóa hãy xem video này
Soon Santos

Câu trả lời:


310

Dưới đây là các bước-

  1. Tải xuống openssl từ mã Google (Nếu bạn có máy 64 bit, bạn phải tải xuống openssl-0.9.8e X64 chứ không phải phiên bản mới nhất)

  2. Giải nén nó tạo một thư mục- OpenSSL trong C: / và sao chép mã được trích xuất tại đây.

  3. phát hiện đường dẫn tệp debug.keystore. Nếu bạn không tìm thấy, hãy thực hiện tìm kiếm trong C: / và sử dụng Đường dẫn trong lệnh trong bước tiếp theo.

  4. phát hiện đường dẫn keytool.exe của bạn và đi đến dấu nhắc lệnh dir / in đó và chạy lệnh này trong 1 dòng-

    $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Documents and Settings \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

    • Nó sẽ hỏi mật khẩu, đặt android
    • đó là tất cả. bạn sẽ nhận được một khóa băm

Để biết thêm thông tin truy cập tại đây


5
Câu trả lời này gần như đã làm việc với tôi trên Win7 x64. Tuy nhiên, chứng chỉ được mã hóa kết quả là không chính xác. Câu trả lời của Bryan Bedard dưới đây sẽ tạo ra giá trị chứng nhận chính xác. Tôi đoán đường ống trên cửa sổ bằng cách nào đó là thủ phạm.
Walt Armor

10
Lưu ý đối với người dùng 64 bit: chỉ hoạt động với phiên bản openssl-0.9.8e X64 không sử dụng với openssl-0.9.8k X64
Nicola Peluchetti

Tôi đã tải xuống openssl-0.9.8e X64 cho hệ thống của mình và giải nén nó. Nó không chứa gì ngoại trừ một tệp có một số dữ liệu. Xin hãy giúp tôi biết thêm.
Ravikiran

2
lệnh nên được thực thi trong thư mục bin của java trong các hệ thống windows.
Antrromet

1
@H BiếnSharma Hãy thử rời khỏi $.
ban-geengineering

241

[EDIT 2020] -> Bây giờ tôi hoàn toàn khuyên bạn nên trả lời ở đây , cách sử dụng android studio dễ dàng hơn, nhanh hơn và không cần phải viết bất kỳ mã nào - đoạn dưới đây đã trở lại trong những ngày nhật thực :) -.

Bạn có thể sử dụng mã này trong bất kỳ hoạt động. Nó sẽ đăng nhập hashkey trong logcat, đây là khóa gỡ lỗi. Điều này thật dễ dàng và thật nhẹ nhõm hơn khi sử dụng SSL.

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String something = new String(Base64.encode(md.digest(), 0));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (NameNotFoundException e1) {
    Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
    Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
    Log.e("exception", e.toString());
}

Bạn có thể xóa mã sau khi biết khóa;)


27
Các bạn, hãy cẩn thận, sau khi tạo apk, hàm băm được thay đổi! Bởi vì sử dụng mã này, bạn nhận được mã băm gỡ lỗi, nhưng khi tạo apk, nó là một hàm băm khác, phải lấy nó từ nhật ký sau khi thử apk của bạn trên trình giả lập, sau đó xóa mã và xuất lại mà không có nhật ký này :) - tôi biết đó là một rắc rối: D nhưng đối với tôi nó dễ hơn keytool, chúc may mắn;)
Bassem Wissa

4
Opensssl luôn tạo ra vấn đề. Phương pháp này là tốt nhất. Chỉ cần tạo một ứng dụng trống và lấy khóa được in, Sử dụng nó. Cảm ơn người đàn ông !!
AnhSirk Dasarp

1
Đây là giải pháp đơn giản nhất. Sử dụng keytoollệnh tôi đã nhận được băm khóa sai (tôi không biết tại sao, quyết định tôi không quan tâm đủ để điều tra). Điều này hoạt động và thực sự mất 5 phút để gỡ lỗi và giải phóng băm khóa. +1
Chris Cirefice

1
Có Sebastien, bạn chỉ cần cài đặt apk đã ký trên thiết bị kết nối nó với studio android và kiểm tra nhật ký mèo hoặc bạn có thể hiển thị hàm băm trong một edittext trong ui và sao chép nó, dù sao thì mã băm này tạo ra hoạt động với apk đã ký :)
Bassem Wissa

1
sử dụng keytool là một mớ hỗn độn rất đơn giản
Tabish 28/03/18

135

Tôi đã tạo một công cụ nhỏ cho Windows và Mac OS X. Chỉ cần nhập tệp lưu trữ khóa và lấy khóa băm.

Nếu bạn muốn tệp debug.keystore mặc định, hãy sử dụng bí danh và mật khẩu mặc định. Khác, sử dụng tập tin và giá trị kho khóa của riêng bạn.

Hãy xem thử, tải xuống phiên bản Windows hoặc tải xuống phiên bản Mac OS X (Đôi khi Dev-Host có thể bị hỏng ... vì vậy nếu liên kết bị hỏng, hãy PM cho tôi và tôi sẽ sửa nó).

Tôi hy vọng điều đó sẽ giúp các bạn ...

Ngày 31 tháng 12 năm 2014 - EDIT: Thay đổi máy chủ thành AFH. Xin vui lòng cho tôi biết nếu các liên kết bị hỏng

Ngày 21 tháng 11 năm 2013 - EDIT:

Khi người dùng yêu cầu, tôi đã thêm một vị trí kho khóa mặc định và nút DONATE. Hãy sử dụng nó nếu tôi đã giúp bạn. :)

Ảnh chụp màn hình Ảnh chụp màn hình 2


1
Tốt. Phương pháp. Không bao giờ. Nút tặng ở đâu?
Adam Varhegyi

1
@ Shahar2k5 Đừng biết thực sự, bắt đầu lại và làm việc như một cơ duyên. Xin lỗi
Anearion

1
Hoạt động như một lá bùa! Cảm ơn đã chia sẻ :)
Vinayak

1
@Shahar Barsheshet Cảm ơn bạn. bạn đúng rồi. Tải xuống từ tên miền Devhost và không có vấn đề phải đối mặt.
MajorGeek

1
Tôi không hiểu điều gì: tại sao công cụ của bạn cung cấp khóa SHA khác, so với sử dụng keytooldòng lệnh? Không phải nó sẽ tạo ra kết quả giống hệt nhau, nếu được áp dụng cho cùng một tệp kho khóa?
bắt đầu từ

64

Các hướng dẫn hiện tại trong Hướng dẫn Android của Facebook không hoạt động tốt trong Windows . Ví dụ của họ cho thấy cách chuyển đầu ra keytool thành openssl nhưng nếu bạn thử điều này trong Windows thì đầu ra không hợp lệ vì một số lý do. Tôi thấy rằng tôi phải sử dụng các tập tin trung gian để làm cho nó hoạt động đúng. Dưới đây là các bước làm việc cho tôi:

Bắt đầu bằng cách tải openssl cho Windows từ Google.

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin

C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin

C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

Sau khi chạy các lệnh này, hàm băm hợp lệ được lưu trữ trong tệp base64.txt. Sao chép và dán phần này vào cài đặt ứng dụng của bạn trên Facebook.


Hoạt động hoàn hảo, mọi thứ khác đều thất bại.
Oliver Dixon

2
Thật là một PITA - nhưng Bryan đã đúng! Lệnh sẽ tạo ra một hàm băm gần như bất kể điều gì, cho dù đường dẫn của bạn sai, mật khẩu sai hay các đường ống không hoạt động đúng - bạn sẽ VẪN NHẬN MỘT HASH nhưng nó sẽ không hoạt động. Vì vậy (trên Windows) tôi đã bỏ Powershell và dùng thử Cygwin - vẫn không hoạt động. Chỉ sau khi sao chép tệp debug.keystore vào thư mục đang hoạt động, tôi mới có thể chạy nó và hoạt động !!
Bobby

2
Vì vậy, tóm lại, trên Windows, hãy sử dụng kỹ thuật phân tách Bryan, HOẶC sử dụng cygwin với tệp kho khóa của bạn trong thư mục làm việc: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 Nếu nó không nhắc bạn nhập mật khẩu thì nó đã không tìm đúng tệp kho khóa.
Bobby

Làm việc hoàn hảo cho tôi. Câu trả lời chính xác.
Ron

Nếu bạn muốn tránh bị băm cho các trường hợp mật khẩu sai, chỉ cần kiểm tra mycert.bin của bạn trước khi tiếp tục với openSSL. Nếu không, bạn sẽ băm văn bản lỗi mật khẩu sai :)
Vaiden

50

Đây là những gì được đưa ra tại trang chính thức của Facebook :

   keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Hãy để tôi phá vỡ lệnh này thành các mảnh.

  1. Hãy tìm "keytool.exe". Bạn có thể tìm kiếm trên ổ C :. Bạn có thể tìm thấy nó trong "java jdk"hoặc "java jre". Nếu bạn đã cài đặt nhiều phiên bản, chọn bất kỳ.

  2. Mở một dấu nhắc CMD và đi đến thư mục trên nơi bạn tìm thấy "keytool.exe".

    Cắt "exe`" và dán lệnh trên được cung cấp trên trang Facebook.

  3. Bạn sẽ gặp lỗi khi nhập cái này mà OpenSSL không được nhận dạng như trong lệnh đầu ra đầu vào. Giải pháp: Tải xuống "Openssl" từ OpenSSL (nếu bạn có máy 64 bit, bạn phải tải xuống openssl-0.9.8e X64 ). Giải nén và lưu nó ở bất cứ đâu ... Tôi đã lưu nó vào ổ C: trong OpenSSlthư mục

  4. Thay thế openssl trong lệnh trên mà bạn gặp lỗi OpenSSL bằng "C: \ OpenSSL \ bin \ openssl" tại cả hai vị trí sau đường ống, "|".

  5. Nếu được nhắc nhập mật khẩu, hãy nhập android.

Và bạn sẽ nhận được khóa băm của bạn. Để biết thêm các bước, hãy tham khảo lại trang Facebook.


32

Thêm mã này vào onCreatehoạt động của bạn, nó sẽ in hàm băm dưới thẻ KeyHash trong logCat của bạn

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           getPackageName(),
                           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) {

}

Bạn có thể thêm nhiều hashtag cho tài khoản của mình, vì vậy nếu bạn đang chạy trong gỡ lỗi, đừng quên chạy lại nó trong chế độ phát hành .


Giải pháp tuyệt vời, tôi đoán không nên có phiên bản chưa ký thực thi? phiên bản chưa ký sẽ không thể cài đặt trên bất kỳ thiết bị nào. Các phiên bản gỡ lỗi được ký kết với kho khóa gỡ lỗi :)
benleung

26

Để lấy mã băm khóa Android, hãy làm theo các bước sau:

  1. Tải xuống OpenSSL cho Windows tại đây
  2. Bây giờ giải nén vào ổ C
  3. Mở một dấu nhắc CMD
  4. Kiểu cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Sau đó chỉ nhập keytool -export -alias myAlias -keystore C:\Users\tên người dùng của bạn\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Làm xong

2
Câu trả lời chính xác. Cảm ơn rât nhiều.
Palani Kumar

1
Đây là cho khóa gỡ lỗi hoặc cho khóa phát hành?
IgorGanapolsky

@IgorGanapolsky thay vì đường dẫn của myKeyStore, hãy đưa đường dẫn của khóa phát hành của bạn. Mã trên dành cho khóa gỡ lỗi
Pallavi

17

Giải pháp đơn giản nhất tôi đã tìm thấy là:

  • Mở nhật ký Cat
  • Hãy thử và truy cập Facebook bằng SDK Android
  • Tìm dòng trong nhật ký trông như thế này:

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. 
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at 
    http://www.facebook.com/developers
  • Sao chép "abcdefgHIJKLMN + OPqrstuvwzyz" và dán nó vào khu vực Hash Android Key của Facebook.


Đây là cách đơn giản và hiệu quả nhất, chỉ cần lấy nó từ nhật ký mà không cần mở!
Luca C.

đây là giải pháp hiệu quả duy nhất cho tôi!. Tôi không thấy nhật ký như bạn, nhưng tôi thấy điều này KeyHash: XWwXXXXX/5xxxxxxxxxxx=trong nhật ký và đã giúp tôi!
Khang Đình Hoàng

14

Bạn có thể lấy mã băm từ khóa SHA-1. Rất đơn giản, bạn cần lấy khóa SHA-1 (APK đã ký) từ Play Store kiểm tra hình ảnh bên dưới.nhập mô tả hình ảnh ở đây

Bây giờ Sao chép khóa SHA-1 đó và qua nó trong trang web này http://tomeko.net cũng kiểm tra hình ảnh bên dưới để lấy Key Hash của bạn.

nhập mô tả hình ảnh ở đây


1
Cảm ơn. Tôi đã cố gắng để có được hàm băm chính bằng cách sử dụng OpenSSL. Tôi mất 1 phút và thật dễ dàng.
Green Y.

1
Cảm ơn rất nhiều! Đây là giải pháp vì Google hiện đang ký ứng dụng của tôi (Tôi chỉ sử dụng chứng chỉ tải lên / kho khóa)
Harrison

13

Tôi đã thực hiện theo cách này cho Linux OS & Windows OS :

Linux:

  • Tải xuống Openssl
  • Thiết bị đầu cuối mở
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Vui lòng thay đổi Tên bí danhKho khóa với đường dẫn theo yêu cầu của bạn.

Thiết bị đầu cuối sẽ hỏi cho Mật khẩu của Keystore. Bạn phải cung cấp mật khẩu cho cùng Keystore .

Vì vậy, cuối cùng bạn sẽ nhận được Hashkey phát hành .

Các cửa sổ:

Các bước để phát hành Hashkey :

  • Tải xuống Openssl (Tải xuống từ đây ), tôi đã tải xuống cho hệ điều hành 64 bit , bạn có thể tìm thêm tại đây
  • Trích xuất tệp zip đã tải xuống vào ổ C: \
  • Mở dấu nhắc lệnh
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

Vui lòng thay đổi Tên bí danhKho khóa với đường dẫn theo yêu cầu của bạn.

Ghi chú:

Vui lòng đặt chi tiết của bạn nơi tôi đã đánh dấu giữa ** **.

Thiết bị đầu cuối sẽ hỏi cho Mật khẩu của Keystore. Bạn phải cung cấp mật khẩu cho cùng Keystore .

Vì vậy, cuối cùng bạn sẽ nhận được Hashkey phát hành .

Làm xong


mật khẩu ở đây là gì?
Akash Bisariya

@AkashBisariya, mật khẩu của kho khóa, mà bạn đã cung cấp khi tạo kho khóa.
Hiren Patel

Tôi có thể tìm khóa ở đâu sau khi tạo thành công?
Anand Phadke

11
  • tải openSSL cho windows tại đây bạn có thể tìm thấy 64 bit và 32 bit tại đây

  • giải nén tập tin đã tải xuống

  • tạo tên thư mục openSSL trong ổ C
  • sao chép tất cả các mục được trích xuất vào thư mục openSSL (bin, bao gồm, lib, openssl.cnf)
  • lấy kho khóa gỡ lỗi android, vị trí mặc định sẽ là

C: \ Người dùng \ tên người dùng \ .android \ debug.keystore

  • Bây giờ hãy nhận dấu nhắc lệnh của bạn và dán mã này

keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ username.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 -binary | "C: \ openSSL \ bin \ openssl" cơ sở64

  • nhấn enter và bạn sẽ nhận được mã khóa gồm 28 chữ số

KHÔNG nó yêu cầu mật khẩu. gõ androidcho băm 24 chữ số và gõ acho băm 28 chữ số. Không biết tại sao!
sud007

liên kết xấu! họ hoàn toàn không có keytool
KawaiKx

6

Bạn cần tạo kho khóa bằng keytool cho các ứng dụng đã ký cho android như quy trình được mô tả trong Trang web Android và sau đó bạn phải cài đặt cygwin và sau đó bạn cần cài đặt openssl từ mã google, sau đó chỉ cần thực hiện lệnh sau và bạn sẽ nhận được hàm băm khóa cho android và sau đó đưa khóa băm đó vào ứng dụng facebook mà bạn đã tạo. Và sau đó, bạn có thể truy cập ứng dụng facebook thông qua Ứng dụng Android để đăng tường ("Publish_stream") có thể là một ví dụ.

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl cơ sở64

Bạn cần thực hiện lệnh trên từ cygwin.


6

Tải xuống openSSL -> Cài đặt nó -> nó thường sẽ cài đặt trong C: \ OpenSSL

sau đó mở cmd và gõ

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

để kiểm tra phiên bản jdk, hãy truy cập C: / tệp chương trình / java / jdk_version

cd bin (enter)

keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

Nó sẽ hỏi bạn mật khẩu là android.


6
  1. Đơn giản chỉ cần mở cho bạn Tệp hoạt động chính và tạo chức năng đề cập bên dưới:

         try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.application.package.name",
                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 (PackageManager.NameNotFoundException e) {
    
    } catch (NoSuchAlgorithmException e) {
     }

1.1 Chạy ứng dụng cho bạn, điều này sẽ tạo ra một khóa Hash cho ứng dụng của bạn.

  1. Bây giờ, Mở nhật ký mèo và tìm kiếm với "KeyHash" và sao chép khóa băm.

  2. Một khi bạn tạo khóa Hash, bạn có thể loại bỏ chức năng này.


5

1) Tạo một khóa để ký ứng dụng của bạn và ghi nhớ bí danh.

2) Cài đặt OpenSSL.

3) Đặt thư mục bin của OpenSSL vào đường dẫn của bạn.

4) Thực hiện theo các bước được đề cập dưới "Thiết lập Single Sign-On" trên FB-Android-SDK trang , và tạo Hash chính của bạn. Hãy chắc chắn rằng bạn đặt đúng tên bí danh và tên tệp kho khóa.

5) Tạo một ứng dụng trên Facebok và trong tab Thiết bị di động, nhập Khóa Hash này.


5

Tài liệu chính thức trên trang web của nhà phát triển facebook :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add code to print out the key hash
    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) {

    }

@WilliamKinaan: bất cứ lúc nào;): P
Hardik Thaker

@HardikThaker Tôi đã sử dụng mã của bạn, nó cung cấp cho tôi chính xác thao tác gõ phím mà tôi đã sử dụng thiết bị đầu cuối bằng lệnh này keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64và tôi vẫn nhận được mã băm không khớp với bất kỳ mã băm được lưu trữ nào
Shan Xeeshi

4
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

Điều này làm việc cho tôi ...

Các bước:

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
   keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

    ....................   give proper debug.keystore path and openSSL path .. 

4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key

4

Dành cho Linux

Mở thiết bị đầu cuối:

Đối với bản dựng gỡ lỗi

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

bạn sẽ tìm thấy debug.keystore từ thư mục ".android" sao chép nó từ và dán trên màn hình nền và chạy lệnh trên

Để phát hành Build

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

LƯU Ý: Đảm bảo Trong cả hai trường hợp, nó phải yêu cầu mật khẩu. Nếu nó không yêu cầu mật khẩu có nghĩa là có gì đó sai trong lệnh.


Tôi nhận được các giá trị khác nhau với tên bí danh khác nhau, làm thế nào để xác minh cái nào là đúng?
Javal Nanda

Nó hỏi mật khẩu với cả tên bí danh?
Biraj Zalavadia

ya và bất cứ mật khẩu nào tôi nhập đều được cung cấp cho tôi khóa băm .. ứng dụng của tôi đã có trên cửa hàng play và fb gốc hiện không hoạt động. Tôi sẽ cần phải tạo ra hàm băm chính xác cho bản phát hành. Các nhà phát triển đang đề xuất để bao gồm mã bên trong onCreate ở sau bưu điện, nhưng tôi muốn làm cho nó làm việc mà không cập nhật ứng dụng trên playstore stackoverflow.com/questions/15021790/...
Javal Nanda

vâng, có một vấn đề với góa phụ với openssl. Bạn có thể đạt được với mã được chỉ định trong bài viết đó.
Biraj Zalavadia

Nếu bạn muốn làm mà không cập nhật trên playstore. 1) Tạo ứng dụng Android Demp mới. 2) Đặt đoạn mã đó vào tạo. 3) ký ứng dụng demo này với cùng kho khóa của ứng dụng trên kho ứng dụng 4) Sau đó, hãy chạy apk đã ký này 5) Và cuối cùng sử dụng khóa băm này
Biraj Zalavadia

4

Đối với ứng dụng Android

Mã này được sử dụng để lấy khóa băm trong ứng dụng Android của bạn để tích hợp Facebook. Tôi đã thử nghiệm tất cả các thiết bị và nó hoạt động. Chỉ thay đổi tên gói của mã này:

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

4

Như đã trả lời về một vấn đề tương tự tôi thấy điều này sẽ làm việc cho tôi:

  • Sao chép apkname.apktệp bạn muốn biết hàm băm của thư mục ' Java \ jdk1.7.0_79 \ bin '
  • Chạy lệnh này keytool -list -printcert -jarfile apkname.apk
  • Sao chép SHA1giá trị và chuyển đổi nó bằng cách sử dụng trang web này
  • Sử dụng giá trị Keyhash đã chuyển đổi ( ví dụ: zaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

Giải pháp đơn giản nhất:

  1. Đừng thêm khóa băm, thực hiện mọi thứ khác
  2. Khi nhấn đăng nhập facebook, bạn sẽ gặp lỗi thông báo "Băm khóa không hợp lệ. Băm khóa" xxx "không khớp với bất kỳ khóa được lưu trữ nào. ..."
  3. Mở bảng điều khiển ứng dụng facebook và thêm hàm băm "xxx =" ("xxx" từ lỗi + "=")

3

Để tạo hàm băm của khóa phát hành, hãy chạy lệnh sau trên Mac hoặc Windows thay thế bí danh khóa phát hành của bạn và đường dẫn đến kho khóa của bạn.

Trên Windows, sử dụng:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Lệnh này sẽ tạo ra một chuỗi 28 charger. Hãy nhớ rằng SAO CHÉPTRẢ TIỀN Khóa phát hành này vào cài đặt Android của ID ứng dụng Facebook của bạn.

hình ảnh: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1804108402_n.png

Tham khảo từ: https://developers.facebook.com/docs/android/getting-started#release-key-hashhttp://note.taable.com


3

Sử dụng cái này để băm khóa in trong kotlin

try {
        val info = context.getPackageManager().getPackageInfo(context.packageName,
                PackageManager.GET_SIGNATURES);
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
        }
    }catch (e:Exception){

    }

2

Đã giải quyết của tôi trong Android Studio nhưng với cách tiếp cận hơi khác nhau.

Để nhận giá trị SHA-1 trong Android Studio.

  1. Nhấp vào lớp
  2. Nhấp vào Báo cáo ký
  3. Sao chép SHA-1

Nhấp vào bảng đánh dấu trong studio Android

  1. Giá trị SHA-1 trông giống như CD này: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    và mở http://tomeko.net/online_tools/hex_to_base64.php để chuyển đổi giá trị SHA1 của bạn thành base64. Đây là những gì Facebook yêu cầu để có được hàm băm được tạo ra "****** / TÌM HIỂU" và sao chép mã băm chính vào bảng điều khiển ứng dụng facebook.

Một phần của câu trả lời này được lấy từ đây Github Link


2

Có hai phương pháp phức tạp có sẵn và một phương pháp dễ dàng

Phương pháp Một: (phức tạp nhỏ)

Trước hết, bạn phải tải xuống ssl 64bit hoặc 32bittheo đó, hãy nhớ tải xuống tệp có tên chứa esau mã phiên bản openssl-0.9.8e_X64.zip HOẶC openssl-0.9.8e_WIN32.zip không phải ksau mã phiên bản,

và đặt trong thư mục AndroidStudio / jre / bin, nếu bạn không biết đặt ở đâu, bạn có thể tìm thấy thư mục này bằng cách nhấp chuột phải vào phím tắt studio android như:

nhập mô tả hình ảnh ở đây

bây giờ bạn đã quản lý hai thứ bắt buộc ở một nơi, nhưng bạn vẫn phải tìm đường dẫn cho mình debug.keystore, điều đó luôn có thể tìm thấy trong "C:\Users\yourusernamehere\.android\debug.keystore",

LƯU Ý Nếu ứng dụng của bạn đã được xuất bản hoặc sắp xuất bản thì hãy sử dụng kho khóa ký xuất bản của bạn, nếu và chỉ khi bạn đang thử nghiệm ở chế độ phát triển, bạn có thể sử dụng gỡ lỗi, keyotre

Vì mọi thứ đã được thiết lập, hãy sắp xếp lệnh bạn muốn thực thi để tạo khóa băm base64 formatvà lệnh của bạn sẽ giống như thế này

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

nó sẽ khuyến khích bạn nhập mật khẩu cho debug.keystore, vốn là Android theo mặc định. nếu bạn đang sử dụng khóa riêng của mình thì mật khẩu cũng sẽ là của bạn. đầu ra sẽ như thế này nếu mọi thứ diễn ra tốt như mong đợi, hy vọng nó có thể giúp

nhập mô tả hình ảnh ở đây

Phương pháp thứ hai (Dễ dàng tôn trọng)

nếu bạn không muốn thực hiện tất cả các thủ tục trên, thì chỉ cần sử dụng phương pháp sau để đăng nhập mã khóa:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

đầu ra:

nhập mô tả hình ảnh ở đây


1

Cách tiếp cận tốt nhất là sử dụng mã sau:

private void getHashKey(String pkgName)
{
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = Base64.encodeBytes(md.digest());
            _hashKey_et.setText(hashKey);
            Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
        }
    }
    catch (NameNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

Nhưng tôi đã rất bực mình với thực tế là không có công cụ đơn giản nào để tạo HashKey cho ứng dụng Facebook. Mỗi lần tôi phải chơi với Openssl và Keytool hoặc sử dụng mã để lấy hàm băm từ chữ ký ...

Vì vậy, tôi đã viết một KeyGenTool đơn giản sẽ làm việc đó cho bạn: -> KeyGenTool trên Google Play <-

Thưởng thức :)


1

Tôi đã làm một lỗi nhỏ cần được ghi nhớ. Nếu bạn đang sử dụng kho khóa của mình thì hãy đặt tên bí danh của bạn, không phải androiddebugkey ...

Tôi đã giải quyết vấn đề của mình. Bây giờ nếu Facebook được cài đặt trong thiết bị của tôi, thì ứng dụng của tôi vẫn nhận được dữ liệu về tích hợp đăng nhập Facebook. Chỉ quan tâm đến khóa băm của bạn.

Vui lòng xem bên dưới.

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

Sau đó nhấn Enter- nó sẽ hỏi bạn mật khẩu và sau đó nhập mật khẩu kho khóa của bạn, không phải Android.

Mát mẻ.


0
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.text.Editable;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    Button btn;
    EditText et;
    PackageInfo info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=(Button)findViewById(R.id.button1);
        et=(EditText)findViewById(R.id.editText1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    info = getPackageManager().getPackageInfo("com.example.id", PackageManager.GET_SIGNATURES);
                    for (Signature signature : info.signatures) {
                        MessageDigest md;
                        md = MessageDigest.getInstance("SHA");
                        md.update(signature.toByteArray());
                        String something = new String(Base64.encode(md.digest(), 0));
                        //String something = new String(Base64.encodeBytes(md.digest()));
                        et.setText("" + something);
                        Log.e("hash key", something);
                    }
                } catch (NameNotFoundException e1) {
                    Log.e("name not found", e1.toString());
                } catch (NoSuchAlgorithmException e) {
                    Log.e("no such an algorithm", e.toString());
                } catch (Exception e) {
                    Log.e("exception", e.toString());
                }
            }
        });
    }



}

Mã này không tạo ra mã băm hợp lệ cho tôi. Câu trả lời của @ Jamshid hoạt động với tôi trên Mac OSX.
Loolooii

0

Mã Kotlin để lấy khóa Hash

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

Xin đừng quên tạo khóa trong môi trường Gỡ lỗi và Phát hành khi chúng thay đổi theo cài đặt bản dựng.


0

thử cái này :

  • hai cách để nhận giá trị khóa Hash

1) nhận khóa băm từ việc sử dụng dòng lệnh (Tài liệu chính thức: https://developers.facebook.com/docs/android/getting-started )

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

HOẶC LÀ

2) lấy mã băm bằng mã

  @Override
   protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

            //Hask Kay generation 
             GetKeyHase();
    }

    private void GetKeyHase() {
            try {
                PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = (MessageDigest.getInstance("SHA"));
                    md.update(signature.toByteArray());
                    String hashkey_value = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", hashkey_value);
                    //check you logcat hash key value
                }
            }catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.