ฉันใช้ฐานข้อมูลกราฟ neo4j บน lubuntu 15.04
ส่วนหัวการรับรองความถูกต้อง HTTP neo4j ใช้การเข้ารหัส base64 ของ 'ชื่อผู้ใช้: รหัสผ่าน' (ไม่รวมเครื่องหมายคำพูด) ใช้ wireshark ฉันสามารถดูรหัส base64 ที่สร้างโดย neo4j
อย่างไรก็ตามถ้าฉันใช้ coreutils ubuntu core64 เพื่อเข้ารหัสสตริงเดียวกันฉันจะได้รับการเข้ารหัสที่แตกต่างกันเล็กน้อย การเข้ารหัสนี้ไม่เป็นที่ยอมรับโดย neo4j
การเข้ารหัสทั้งสองถอดรหัสเป็นชื่อผู้ใช้ที่ถูกต้อง: สตริงรหัสผ่าน
ตัวอย่าง
ชื่อผู้ใช้ = neo4j
และรหัสผ่าน =@N
Neo4j ให้ค่าการเข้ารหัสneo4j:@N
ตามbmVvNGo6QE4=
ที่ถอดรหัสneo4j:@N
เป็นอย่างที่คาดไว้
$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N
coreutils ของ Ubuntu base64
ส่งกลับค่าที่เข้ารหัสneo4j:@N
เป็นbmVvNGo6QE4K
(ซึ่งแตกต่างจากอักขระตัวสุดท้าย) แต่ก็ยังถอดรหัสได้อย่างถูกต้อง
$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N
ทำไมนี้ ฉันต้องทำอะไรเพื่อให้ได้การเข้ารหัสที่สอดคล้องกัน
=
ใน Base64 ปกติคือการเติม (และใช้ได้เฉพาะตอนท้าย) ความจริงที่ว่าหนึ่งสายเข้ารหัสมี padding และอื่น ๆ ไม่ได้ (หรือโดยทั่วไปว่าทั้งสองสายมีจำนวนที่แตกต่างกันของ padding) เป็นของแถมที่ตายแล้วที่ทั้งสองมีความยาวแตกต่างกันและจึงอาจไม่เหมือนกัน