แฮชคีย์สำหรับแอพ Android-Facebook


229

ฉันกำลังทำงานกับแอพ Android ที่ฉันต้องการรวมคุณสมบัติการโพสต์ Facebook ฉันดาวน์โหลด Facebook-Android SDK และฉันได้ readme.md (ไฟล์ข้อความ) ในนั้นซึ่งถูกกล่าวถึงเพื่อสร้างแฮชคีย์สำหรับ Android ฉันจะสร้างมันได้อย่างไร


2
คุณสามารถตรวจสอบลิงค์นี้javatechig.com/2012/12/10/…
Nilanchal

2
ตรวจสอบนี้สำหรับผู้ที่ยังคงประสบปัญหา
Chintan Khetiya

สร้าง HashKey สำหรับการดีบักและปล่อยโหมดโดยใช้สิ่งนี้ stackoverflow.com/questions/7506392/…
Naeem Ibrahim

ในการรับกุญแจดูวิดีโอนี้
เร็ว ๆ นี้ Santos

คำตอบ:


310

นี่คือขั้นตอน -

  1. ดาวน์โหลด openssl จากรหัส Google (หากคุณมีเครื่อง 64 บิตคุณต้องดาวน์โหลด openssl-0.9.8e X64ไม่ใช่รุ่นล่าสุด)

  2. แยกมันออกมา สร้างโฟลเดอร์ - OpenSSL ใน C: / และคัดลอกรหัสที่แยกออกมาที่นี่

  3. ตรวจจับเส้นทางไฟล์ debug.keystore หากคุณไม่พบให้ทำการค้นหาใน C: / และใช้ Path ในคำสั่งในขั้นตอนถัดไป

  4. ตรวจสอบเส้นทาง keytool.exe ของคุณและไปที่พรอมต์คำสั่ง dir / in และเรียกใช้คำสั่งนี้ใน 1 บรรทัด

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

    • มันจะถามรหัสผ่านใส่ Android
    • นั่นคือทั้งหมดที่ คุณจะได้รับแฮชคีย์

สำหรับข้อมูลเพิ่มเติมเยี่ยมชมที่นี่


5
คำตอบนี้ใช้ได้กับฉันใน Win7 x64 อย่างไรก็ตามใบรับรองที่เข้ารหัสที่ได้นั้นไม่ถูกต้อง คำตอบของไบรอันเบดาร์ดด้านล่างจะสร้างมูลค่าใบรับรองที่ถูกต้อง ฉันคาดเดาว่าการวางท่อบนหน้าต่างเป็นสาเหตุของปัญหา
Walt Armor

10
หมายเหตุสำหรับผู้ใช้ 64 บิต: ใช้กับ openssl-0.9.8e X64 ไม่ได้ใช้กับ openssl-0.9.8k X64
Nicola Peluchetti

ฉันดาวน์โหลด openssl-0.9.8e X64 สำหรับระบบของฉันและแตกไฟล์มันไม่มีอะไรเลยนอกจากไฟล์เดียวที่มีข้อมูลบางส่วน โปรดช่วยฉันรู้เพิ่มเติม
Ravikiran

2
คำสั่งควรดำเนินการในโฟลเดอร์ bin ของ java ในระบบ windows
Antrromet

1
@HanishSharma $ลองออกออก
บ้านจีโอเอ็นจิเนียริ่ง

241

[แก้ไขปี 2020] -> ตอนนี้ฉันขอแนะนำคำตอบทั้งหมดที่นี่วิธีที่ง่ายกว่าการใช้ android studio เร็วขึ้นและไม่จำเป็นต้องเขียนโค้ดใด ๆ

คุณสามารถใช้รหัสนี้ในกิจกรรมใดก็ได้ มันจะเข้าสู่ระบบแฮชคีย์ใน logcat ซึ่งเป็นคีย์แก้ปัญหา ง่ายและโล่งใจกว่าการใช้ 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());
}

คุณสามารถลบรหัสได้หลังจากรู้รหัส;)


27
Guys ดูแลหลังจากสร้าง apk แฮชคีย์จะเปลี่ยนไป! เพราะการใช้รหัสนี้คุณจะได้รับ debug keystore hash แต่เมื่อสร้าง apk มันเป็นแฮชอีกอันต้องจับมันจาก log หลังจากลอง ur apk บนอีมูเลเตอร์แล้วลบรหัสและส่งออกอีกครั้งโดยไม่ต้อง log นี้ :) - ฉันรู้ว่ามันยุ่งยาก: D แต่สำหรับฉันมันง่ายกว่า keytool โชคดี;)
Bassem Wissa

4
Opensssl สร้างปัญหาเสมอ วิธีนี้เป็นวิธีที่ดีที่สุด เพียงสร้างแอปเปล่าและพิมพ์รหัสใช้งาน ขอบคุณผู้ชาย !!
AnhSirk Dasarp

1
นี่คือทางออกที่ง่ายที่สุด การใช้keytoolคำสั่งที่ฉันได้รับแฮชคีย์ผิด (ฉันไม่รู้ว่าทำไมตัดสินใจฉันไม่สนใจมากพอที่จะตรวจสอบ) วิธีนี้ใช้งานได้จริงและใช้เวลา 5 นาทีเพื่อให้การดีบักและปล่อยแฮชคีย์ +1
Chris Cirefice

1
ใช่ Sebastien คุณเพียงแค่ต้องติดตั้ง apk ที่ลงชื่อแล้วบนอุปกรณ์เชื่อมต่อกับ android studio และตรวจสอบ log cat หรือคุณสามารถแสดง hash ใน edittext ใน UI และคัดลอกมันใช่แล้ว hash ที่ code นี้สร้างขึ้นมาด้วย apk ที่ลงนามแล้ว :)
Bassem Wissa

1
การใช้ keytool เป็นระเบียบนี้ง่ายจริงๆ
Tabish

135

ฉันได้สร้างเครื่องมือขนาดเล็กสำหรับ Windows และ Mac OS X เพียงแค่โยนไฟล์เก็บคีย์และรับแฮชคีย์

หากคุณต้องการไฟล์ debug.keystore เริ่มต้นให้ใช้นามแฝงและรหัสผ่านเริ่มต้น มิฉะนั้นให้ใช้ไฟล์ keystore และค่าของคุณเอง

ลองดูดาวน์โหลดเวอร์ชั่น Windowsหรือดาวน์โหลดเวอร์ชั่นMac OS X (Dev-Host อาจหยุดทำงานในบางครั้ง ... ดังนั้นหากลิงค์เสีย PM ฉันและฉันจะแก้ไข)

ฉันหวังว่าจะช่วยพวกคุณ ...

31 ธันวาคม 2014 - แก้ไข: เปลี่ยนโฮสต์เป็น AFH โปรดแจ้งให้เราทราบหากลิงก์เสีย

21 พ.ย. 2556 - แก้ไข:

ตามที่ผู้ใช้ร้องขอฉันเพิ่มตำแหน่งที่เก็บคีย์เริ่มต้นและปุ่ม DONATE รู้สึกอิสระที่จะใช้มันถ้าฉันได้ช่วยคุณ :)

สกรีนช็อต สกรีนช็อต 2


1
ดีที่สุด วิธี. เคย. ปุ่มบริจาคอยู่ที่ไหน
Adam Varhegyi

1
@ Shahar2k5 ไม่รู้จริง ๆ เริ่มใหม่อีกครั้งและทำงานเหมือนจับใจ ขออภัย
Anearion

1
ทำงานเหมือนจับใจ! ขอบคุณสำหรับการแบ่งปัน :)
Vinayak

1
@Shahar Barsheshet ขอบคุณ คุณพูดถูก ดาวน์โหลดจากโดเมน Devhost และไม่มีปัญหาใด ๆ
MajorGeek

1
ฉันไม่เข้าใจบางสิ่ง: ทำไมเครื่องมือของคุณถึงให้คีย์ SHA ที่แตกต่างเมื่อเปรียบเทียบกับการใช้keytoolบรรทัดคำสั่ง มันควรจะให้ผลลัพธ์ที่เหมือนกันหรือไม่หากนำไปใช้กับไฟล์ keystore เดียวกัน
nightfixed

64

คำแนะนำในขณะนี้ในFacebook ของ Android สอน ไม่ทำงานได้ดีภายใต้ของ Windows ตัวอย่างของพวกเขาแสดงวิธีการไพพ์เอาต์พุต keytool ไปยัง openssl แต่ถ้าคุณลองภายใต้ Windows เอาต์พุตจะไม่ถูกต้องด้วยเหตุผลบางประการ ฉันพบว่าฉันต้องใช้ไฟล์ตัวกลางเพื่อให้มันทำงานได้อย่างถูกต้อง นี่คือขั้นตอนที่เหมาะกับฉัน:

เริ่มต้นด้วยการดาวน์โหลดopenssl สำหรับ Windowsจาก 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

หลังจากรันคำสั่งเหล่านี้แฮชที่ถูกต้องจะถูกเก็บไว้ในไฟล์ base64.txt คัดลอกและวางสิ่งนี้ลงในการตั้งค่าแอพของคุณบน Facebook


ทำงานได้สมบูรณ์แบบทุกสิ่งทุกอย่างล้มเหลว
Oliver Dixon

2
ช่างเป็น PITA - แต่ไบรอันพูดถูก! คำสั่งจะเอาท์พุทแฮชแทบจะไม่ว่าอะไรก็ตามไม่ว่าเส้นทางของคุณจะผิดรหัสผ่านไม่ถูกต้องหรือไพพ์ไม่ทำงาน - คุณจะยังคงแฮช แต่มันจะไม่ทำงาน ดังนั้น (บน Windows) ฉันทิ้ง Powershell แล้วลอง Cygwin - ยังไม่ทำงาน หลังจากคัดลอกไฟล์ debug.keystore ไปยัง dir ที่ใช้งานได้ฉันสามารถให้มันทำงานและทำงานได้ !!
Bobby

2
ดังนั้นโดยสรุปบน Windows อาจใช้เทคนิคของไบรอันในการแยกมันออกจากกันหรือใช้ cygwin กับไฟล์ที่เก็บคีย์ของคุณใน dir ที่ทำงาน: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 หากไม่แจ้งให้คุณใส่รหัสผ่านแสดงว่าไม่พบไฟล์ที่เก็บคีย์อย่างถูกต้อง
Bobby

ทำงานอย่างสมบูรณ์แบบสำหรับฉัน คำตอบที่ดี
Ron

หากคุณต้องการหลีกเลี่ยงการแฮ็ชในกรณีที่รหัสผ่านผิดให้ตรวจสอบ mycert.bin ของคุณก่อนที่จะดำเนินการกับ openSSL มิฉะนั้นคุณต้องการจะ hashing ข้อความข้อผิดพลาดรหัสผ่านไม่ถูกต้อง :)
Vaiden

50

นี่คือสิ่งที่ให้ไว้ในหน้าอย่างเป็นทางการของ Facebook :

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

ให้ฉันแบ่งคำสั่งนี้เป็นชิ้นส่วน

  1. "keytool.exe"มองหา คุณสามารถค้นหาในไดรฟ์ C: คุณสามารถค้นหาได้ในหรือ"java jdk" "java jre"หากคุณติดตั้งหลายรุ่นให้เลือกใด ๆ

  2. เปิด CMD "keytool.exe"พรอมต์และไปที่ไดเรกทอรีดังกล่าวข้างต้นที่คุณพบ

    คลิป "exe`" และวางคำสั่งด้านบนที่มีให้ในหน้า Facebook

  3. คุณจะได้รับข้อผิดพลาดในการป้อนสิ่งนี้ซึ่ง OpenSSL ไม่ได้รับการยอมรับเช่นเดียวกับในคำสั่งอินพุตเอาต์พุต วิธีแก้ปัญหา: ดาวน์โหลด "Openssl" จากOpenSSL (หากคุณมีเครื่อง 64 บิตคุณต้องดาวน์โหลด openssl-0.9.8e X64 ) แยกและบันทึกได้ทุกที่ ... ฉันบันทึกไว้ในไดรฟ์ C: ในOpenSSlโฟลเดอร์

  4. แทนที่ openssl ในคำสั่งด้านบนซึ่งคุณได้รับข้อผิดพลาดของ OpenSSL ด้วย "C: \ OpenSSL \ bin \ openssl" ที่ทั้งสองแห่งหลังจากที่ไปป์ "|"

  5. androidหากได้รับแจ้งให้ใส่รหัสผ่านให้ป้อน

และคุณจะได้รับรหัสแฮชของคุณ สำหรับขั้นตอนเพิ่มเติมอ้างถึงหน้า Facebook อีกครั้ง


32

เพิ่มรหัสนี้ลงonCreateในกิจกรรมของคุณมันจะพิมพ์แฮชภายใต้แท็กKeyHashใน logCat ของคุณ

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) {

}

คุณสามารถเพิ่ม hashkeys หลายสำหรับบัญชีของคุณดังนั้นถ้าคุณได้รับการทำงานในการแก้ปัญหาไม่ลืมที่จะทำงานนี้อีกครั้งในโหมดการเปิดตัว


ทางออกที่ดีฉันเดาว่าไม่ควรมีเวอร์ชันที่ไม่ได้ลงนามที่สามารถใช้งานได้? รุ่นที่ไม่ได้ลงชื่อไม่ควรติดตั้งในอุปกรณ์ใด ๆ รุ่นการแก้ปัญหาเหล่านี้จะเซ็นสัญญากับการแก้ปัญหา keystore :)
benleung

26

ในการรับรหัสแฮชของ Android ให้ทำตามขั้นตอนเหล่านี้:

  1. ดาวน์โหลด OpenSSL สำหรับ Windows ที่นี่
  2. ตอนนี้เปิดเครื่องรูดไปที่ไดรฟ์ C
  3. เปิดพรอมต์ CMD
  4. ชนิด cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. จากนั้นพิมพ์เฉพาะkeytool -export -alias myAlias -keystore C:\Users\ชื่อผู้ใช้ของคุณ\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. เสร็จสิ้น

2
คำตอบที่ดี ขอบคุณมาก.
Palani Kumar

1
นี่เป็นรหัสสำหรับการดีบักหรือสำหรับรหัสการปลดล็อคหรือไม่
IgorGanapolsky

@IgorGanapolsky แทนที่จะเป็นพา ธmyKeyStoreให้พา ธ ของคีย์การปลดล็อคของคุณ รหัสด้านบนใช้สำหรับคีย์ดีบั๊ก
Pallavi

17

ทางออกที่ง่ายที่สุดที่ฉันพบคือ:

  • เปิด Log Cat
  • ลองและเข้าถึง Facebook ด้วย Android SDK
  • ค้นหาบรรทัดในบันทึกที่มีลักษณะดังนี้:

    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
  • คัดลอก "abcdefgHIJKLMN + OPqrstuvwzyz" และวางลงในพื้นที่แฮชคีย์ Android ของ Facebook


นี่เป็นวิธีที่ง่ายและมีประสิทธิภาพมากที่สุดเพียงแค่นำออกจากบันทึกโดยไม่ต้องเปิด openssl!
Luca C.

นี่เป็นทางออกเดียวสำหรับฉัน! ฉันไม่เห็นบันทึกเช่นคุณ แต่ฉันเห็นสิ่งนี้KeyHash: XWwXXXXX/5xxxxxxxxxxx=ในบันทึกและช่วยฉันออกไป!
Khang Dinh Hoang

14

คุณสามารถรับแฮชคีย์จากคีย์ SHA-1 มันง่ายมากที่คุณจะต้องรับคีย์ SHA-1 (APK ที่ลงชื่อ) จาก Play Store ตรวจสอบภาพด้านล่างป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คัดลอกรหัส SHA-1 และวางไว้ในเว็บไซต์นี้http://tomeko.netตรวจสอบภาพด้านล่างเพื่อรับรหัสแฮชของคุณ

ป้อนคำอธิบายรูปภาพที่นี่


1
ขอบคุณ ฉันพยายามรับแฮชคีย์โดยใช้ OpenSSL ฉันใช้เวลา 1 นาทีและมันก็ง่าย
Green Y.

1
ขอบคุณมาก! นี่เป็นวิธีการแก้ปัญหาในขณะที่ Google ได้รับการลงนามใน app ของฉันตอนนี้ (ฉันเพียงแค่ใช้ใบรับรองอัพโหลด / keystore)
แฮร์ริสัน

13

ฉันได้ทำโดยวิธีนี้สำหรับLinux OSและWindows OS :

ลินุกซ์:

  • ดาวน์โหลด Openssl
  • เปิดเทอร์มินัล
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

โปรดเปลี่ยนชื่อนามแฝงและคีย์สโตนด้วยพา ธ ของมันตามความต้องการของคุณ

เทอร์มิจะถามสำหรับรหัสผ่านของ Keystore คุณต้องใส่รหัสผ่านสำหรับเดียวกันKeystore

ดังนั้นในที่สุดคุณจะได้รับRelease Hashkey

ของ windows:

ขั้นตอนสำหรับการปล่อย แฮชคีย์ :

  • ดาวน์โหลด Openssl (ดาวน์โหลดได้จากที่นี่ ) ฉันได้ดาวน์โหลดระบบปฏิบัติการ64 บิตแล้วคุณสามารถค้นหาเพิ่มเติมได้ที่นี่
  • แตกไฟล์ zip ที่ดาวน์โหลดมาไปที่ C: \ drive เท่านั้น
  • พร้อมรับคำสั่งเปิด
  • 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

โปรดเปลี่ยนชื่อนามแฝงและคีย์สโตนด้วยพา ธ ของมันตามความต้องการของคุณ

บันทึก:

โปรดใส่รายละเอียดของคุณที่ฉันทำเครื่องหมายไว้ระหว่าง ** **

เทอร์มิจะถามสำหรับรหัสผ่านของ Keystore คุณต้องใส่รหัสผ่านสำหรับเดียวกันKeystore

ดังนั้นในที่สุดคุณจะได้รับRelease Hashkey

เสร็จสิ้น


รหัสผ่านที่นี่คืออะไร?
Akash Bisariya

@AkashBisariya รหัสผ่านของ keystore ที่คุณให้ไว้ขณะสร้าง keystore
Hiren Patel

ฉันจะหาคีย์ได้หลังจากสร้างสำเร็จหรือไม่
Anand Phadke

11
  • ดาวน์โหลด openSSL สำหรับ windows ที่นี่คุณสามารถหา 64 บิตและ 32 บิตได้ที่นี่

  • แตกไฟล์ที่ดาวน์โหลดมา

  • สร้างชื่อโฟลเดอร์ openSSL ในไดรฟ์ C
  • คัดลอกรายการที่แตกทั้งหมดไปยังโฟลเดอร์ openSSL (bin, include, lib, openssl.cnf)
  • รับ android debug keystore ตำแหน่งดีฟอลต์จะเป็น

C: \ Users \ ชื่อผู้ใช้ \ .android \ debug.keystore

  • ตอนนี้รับคำสั่งของคุณและวางรหัสนี้

keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ username.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 -binary | "C: \ openSSL \ bin \ openssl" base64

  • กด Enter แล้วคุณจะได้รับรหัส 28 หลัก

ไม่มันถามรหัสผ่าน การพิมพ์androidให้แฮช 24 หลักและการพิมพ์aให้แฮช 28 หลัก ไม่รู้ทำไม!
sud007

ลิงก์ไม่ดี! พวกเขาไม่มี keytool เลย
KawaiKx

6

คุณต้องสร้างที่เก็บคีย์โดย keytool สำหรับแอพที่ลงนามแล้วสำหรับ Android เช่นขั้นตอนที่อธิบายไว้ในไซต์ Androidแล้วคุณต้องติดตั้ง cygwin จากนั้นคุณต้องติดตั้ง openssl จากรหัส googleจากนั้นเพียงแค่เรียกใช้คำสั่งต่อไปนี้ คีย์สำหรับ android แล้วใส่รหัสแฮชนั้นลงในแอปพลิเคชัน facebook ที่คุณสร้างขึ้น และจากนั้นคุณสามารถเข้าถึงแอปพลิเคชัน Facebook ผ่านแอปพลิเคชัน Android เพื่อโพสต์วอลล์ ("publish_stream") อาจเป็นตัวอย่าง

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64

คุณต้องดำเนินการคำสั่งดังกล่าวจาก cygwin


6

ดาวน์โหลด openSSL ->ติดตั้ง->มันมักจะติดตั้งในC: \ OpenSSL

จากนั้นเปิด cmd และประเภท

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

java (Enter)

dir (Enter)

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

เพื่อตรวจสอบเวอร์ชั่น jdk ไปที่C: / program files / 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)

มันจะขอรหัสผ่านซึ่งเป็น Android


6
  1. เพียงเปิดไฟล์กิจกรรมหลักของคุณและสร้างฟังก์ชั่นด้านล่างนี้:

         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 เรียกใช้แอปพลิเคชันของคุณซึ่งจะสร้างรหัสแฮชสำหรับแอปพลิเคชันของคุณ

  1. ตอนนี้เปิดล็อกแมวและค้นหาด้วย "KeyHash" และคัดลอกคีย์แฮ

  2. หนึ่งที่คุณสร้างคีย์แฮคุณสามารถลบฟังก์ชั่นนี้


5

1) สร้างรหัสเพื่อลงชื่อสมัครใช้ของคุณและจดจำนามแฝง

2) ติดตั้ง OpenSSL

3) วางโฟลเดอร์ bin ของ OpenSSL ในเส้นทางของคุณ

4) ทำตามขั้นตอนที่ระบุไว้ภายใต้ "การติดตั้ง Single Sign-On" บน FB-ปฏิบัติการ Android SDK หน้าและสร้างความยุ่งเหยิงที่สำคัญของคุณ ตรวจสอบให้แน่ใจว่าคุณใส่ชื่อแทนและที่เก็บคีย์ที่ถูกต้อง

5) สร้างแอปพลิเคชันบน Facebok และภายใต้แท็บอุปกรณ์มือถือให้ป้อนรหัสแฮชนี้


5

เอกสารอย่างเป็นทางการในเว็บไซต์นักพัฒนา 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: ทุกเวลา;): P
Hardik Thaker

@HardikThaker ฉันใช้รหัสของคุณมันให้ keyhash เดียวกับที่ฉันใช้ terminal โดยคำสั่งนี้keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64และฉันยังคงได้รับ hash ของคีย์ไม่ตรงกับ hash ของคีย์ที่เก็บไว้
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

สิ่งนี้ใช้ได้กับฉัน ...

ขั้นตอน:

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

สำหรับ Linux

เปิดเทอร์มินัล:

สำหรับ Debug Build

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

คุณจะพบdebug.keystoreจากโฟลเดอร์ ".android" คัดลอกจากและวางบนเดสก์ท็อปและเรียกใช้คำสั่งด้านบน

สำหรับรุ่น Build

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

หมายเหตุ: ตรวจสอบให้แน่ใจว่าในทั้งสองกรณีจะต้องขอรหัสผ่าน หากไม่ขอรหัสผ่านแสดงว่ามีบางอย่างผิดปกติในคำสั่ง


ฉันได้รับค่าต่าง ๆ ด้วยชื่อนามแฝงที่แตกต่างกันฉันจะตรวจสอบว่าชื่อใดถูกต้องได้อย่างไร
Javal Nanda

มันขอรหัสผ่านที่มีทั้งชื่อแทนหรือเปล่า?
Biraj Zalavadia

ยาและรหัสผ่านอะไรก็ตามที่ฉันป้อนให้กับฉันคือรหัสแฮช .. แอปของฉันมีอยู่แล้วใน play store และ fb ดั้งเดิมไม่ทำงาน ฉันจะต้องสร้างแฮชของคีย์ที่แน่นอนสำหรับรุ่นบิลด์ นักพัฒนาแนะนำให้ใส่รหัสใน onCreate ในโพสต์ต่อไปนี้ แต่ฉันต้องการให้มันทำงานโดยไม่ต้องอัปเดตแอปใน playstore stackoverflow.com/questions/15021790/…
Javal Nanda

ใช่มีปัญหากับแม่ม่ายด้วย openssl คุณสามารถบรรลุด้วยรหัสที่ระบุในโพสต์นั้น
Biraj Zalavadia

หากคุณต้องการโดยไม่ต้องอัปเดตที่ playstore 1) สร้างแอป Android Demp ใหม่ 2) ใส่ชิ้นส่วนของรหัสนั้นในเมื่อสร้าง 3) ลงชื่อแอพตัวอย่างนี้ด้วยแอป keystore เดียวกับคุณที่ app store 4) จากนั้นเรียกใช้ apk ที่ลงชื่อแล้ว 5) และใช้แฮชคีย์นี้ในที่สุด
Biraj Zalavadia

4

สำหรับแอปพลิเคชัน Android

รหัสนี้ใช้เพื่อรับรหัสแฮชในแอปพลิเคชัน Android ของคุณสำหรับการรวม Facebook ฉันได้ทดสอบอุปกรณ์ทั้งหมดและใช้งานได้ เปลี่ยนชื่อแพ็คเกจของรหัสนี้เท่านั้น:

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

ตามที่ได้รับคำตอบในประเด็นที่คล้ายกันฉันพบว่าสิ่งนี้ทำงานได้สำหรับฉัน:

  • คัดลอกapkname.apkไฟล์ที่คุณต้องการทราบแฮชของไปยังโฟลเดอร์ ' Java \ jdk1.7.0_79 \ bin '
  • เรียกใช้คำสั่งนี้ keytool -list -printcert -jarfile apkname.apk
  • คัดลอกSHA1ค่าและแปลงโดยใช้เว็บไซต์นี้
  • ใช้ค่า Keyhash ที่แปลงแล้ว ( เช่น zaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

ทางออกที่ง่ายที่สุด:

  1. อย่าเพิ่มปุ่มแฮชนำไปใช้ทุกอย่างอื่น
  2. เมื่อกดเข้าสู่ระบบ Facebook คุณจะได้รับข้อผิดพลาดว่า "แฮชคีย์ไม่ถูกต้องแฮชคีย์" xxx "ไม่ตรงกับคีย์ที่เก็บไว้ใด ๆ ... "
  3. เปิดแดชบอร์ดแอพ facebook และเพิ่มแฮช "xxx =" ("xxx" แฮชจากข้อผิดพลาด + "=" เครื่องหมาย)

3

ในการสร้างแฮชของรีลีสคีย์ของคุณให้รันคำสั่งต่อไปนี้บน Mac หรือ Windows เพื่อแทนที่ alias key ของรีลีสและพา ธ ไปยังที่เก็บคีย์ของคุณ

บน Windows ให้ใช้:

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

คำสั่งนี้ควรสร้างสตริงอักขระ 28 ตัว โปรดจำไว้ว่าคัดลอกและวางรหัสแฮชของรุ่นนี้ลงในการตั้งค่า Android ของ Facebook App ID

ภาพ: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

อ้างอิงจาก: https://developers.facebook.com/docs/android/getting-started#release-key-hashและhttp://note.taable.com


3

ใช้สิ่งนี้สำหรับแฮชของคีย์การพิมพ์ใน 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

แก้ไขฉันด้วยใน Android Studio แต่ด้วยวิธีที่แตกต่างกันเล็กน้อย

วิธีรับค่า SHA-1 ใน Android Studio

  1. คลิก Gradle
  2. คลิกรายงานการลงชื่อ
  3. คัดลอก SHA-1

คลิกแผงที่ทำเครื่องหมายไว้ในสตูดิโอ Android

  1. ค่า SHA-1 ดูเหมือนซีดีนี้: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8: 44: 84

    และเปิดhttp://tomeko.net/online_tools/hex_to_base64.phpเพื่อแปลงค่า SHA1 ของคุณเป็น base64 นี่คือสิ่งที่ Facebook ต้องการเพื่อรับแฮชที่สร้างขึ้น "******************** =" และคัดลอกแฮชคีย์ไปยังคอนโซลแอป Facebook

ส่วนหนึ่งของคำตอบนี้นำมาจากที่นี่Github Link


2

มีสองวิธีที่มีความซับซ้อนและวิธีที่ง่าย

วิธีที่หนึ่ง: (ซับซ้อนเล็กน้อย)

ก่อนอื่นคุณต้องดาวน์โหลดSSL 64bitหรือ32bitตามอย่าลืมที่จะดาวน์โหลดไฟล์ที่มีชื่อที่มีeหลังโค้ดรุ่นopenssl-0.9.8e_X64.zipหรือopenssl-0.9.8e_WIN32.zipไม่ได้อยู่กับkหลังโค้ดรุ่น

และวางไว้ในไดเรกทอรี AndroidStudio / jre / bin หากคุณไม่รู้ว่าจะวางตำแหน่งใดคุณสามารถค้นหาไดเรกทอรีนี้ได้โดยคลิกขวาบนทางลัดของ studio studio Android:

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณมีการจัดการที่สองสิ่งที่จำเป็นต้องใช้ในสถานที่แห่งหนึ่ง แต่ยังคงคุณต้องไปหาเส้นทางสำหรับคุณdebug.keystoreที่จะสามารถพบได้ใน"C:\Users\yourusernamehere\.android\debug.keystore",

หมายเหตุ หากแอปของคุณได้รับการเผยแพร่แล้วหรือกำลังจะเผยแพร่ให้ใช้ที่เก็บคีย์การเผยแพร่ของคุณหากว่าคุณกำลังทดสอบในโหมดการพัฒนามากกว่าที่คุณสามารถใช้ debug, keysotre

เมื่อทุกอย่างถูกตั้งค่าให้จัดเรียงคำสั่งที่คุณต้องการเรียกใช้สำหรับการสร้างรหัสแฮชbase64 formatและคุณคำสั่งจะมีลักษณะเช่นนี้

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

มันจะให้คุณป้อนรหัสผ่านสำหรับ debug.keystore ซึ่งเป็น android โดยค่าเริ่มต้น หากคุณใช้รหัสของคุณเองมากกว่ารหัสผ่านก็จะเป็นของคุณเช่นกัน ผลลัพธ์จะมีลักษณะเช่นนี้หากทุกอย่างเป็นไปตามที่คาดหวังหวังว่ามันจะช่วยได้

ป้อนคำอธิบายรูปภาพที่นี่

วิธีที่สอง (ง่าย ๆ อย่างหนึ่งตามลำดับ)

หากคุณไม่ต้องการทำตามขั้นตอนทั้งหมดข้างต้นให้ใช้วิธีต่อไปนี้เพื่อบันทึก haskey:

 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());
        }
    }

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


1

วิธีที่ดีที่สุดคือการใช้รหัสต่อไปนี้:

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();
    }
}

แต่ฉันรู้สึกผิดหวังกับความจริงที่ว่าไม่มีเครื่องมือง่ายๆในการสร้าง HashKey สำหรับแอพ Facebook ทุกครั้งที่ฉันต้องเล่นกับ Openssl และ Keytool หรือใช้รหัสเพื่อรับแฮชจากลายเซ็น ...

ดังนั้นฉันจึงเขียน KeyGenTool ง่ายๆที่จะทำงานให้คุณ: -> KeyGenTool บน Google Play <-

สนุก :)


1

ฉันทำผิดเล็กน้อยที่ควรจำไว้ หากคุณใช้ที่เก็บคีย์ของคุณโปรดตั้งชื่อแทนไม่ใช่ androiddebugkey ...

ฉันแก้ไขปัญหาของฉัน ตอนนี้ถ้าติดตั้ง Facebook ไว้ในอุปกรณ์ของฉันแล้วแอปของฉันก็ยังรับข้อมูลจากการรวมเข้าสู่ระบบ Facebook เพียงแค่ดูแลเกี่ยวกับรหัสแฮชของคุณ

โปรดดูที่ด้านล่าง.

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

จากนั้นกดEnter- มันจะขอรหัสผ่านจากนั้นป้อนรหัสผ่านที่เก็บคีย์ของคุณไม่ใช่ Android

เย็น.


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());
                }
            }
        });
    }



}

รหัสนี้ไม่ได้สร้างรหัสแฮชที่ถูกต้องสำหรับฉัน คำตอบของ @ Jamshid ใช้ได้กับฉันใน Mac OSX
Loolooii

0

รหัส Kotlin เพื่อรับรหัสแฮช

 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());
    }
}

โปรดอย่าลืมสร้างคีย์ในสภาพแวดล้อม Debug และ Release ตามที่เปลี่ยนตามการตั้งค่าการสร้าง


0

ลองนี้:

  • สองวิธีในการรับค่าแฮชคีย์

1) รับรหัสแฮชจากการใช้บรรทัดคำสั่ง (เอกสารอย่างเป็นทางการ: https://developers.facebook.com/docs/android/getting-started )

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

หรือ

2) รับรหัสแฮชโดยใช้รหัส

  @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());
            }
        }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.