Tôi đang sử dụng cơ sở dữ liệu đồ thị neo4j dựa trên java trên Ubuntu 15.04.
Tiêu đề xác thực HTTP neo4j sử dụng mã hóa base64 của 'username: password' (không bao gồm dấu ngoặc kép). Sử dụng wireshark tôi có thể thấy mã base64 được tạo bởi neo4j.
Tuy nhiên, nếu tôi sử dụng ubfox coreutils base64 để mã hóa cùng một chuỗi, tôi nhận được một mã hóa hơi khác. Mã hóa này không được chấp nhận bởi neo4j.
Cả hai mã hóa đều giải mã đúng tên người dùng: chuỗi mật khẩu
Thí dụ
tên người dùng = neo4j
và mật khẩu =@N
Neo4j cung cấp giá trị được mã hóa neo4j:@N
theo như bmVvNGo6QE4=
giải mã neo4j:@N
như mong đợi
$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N
Ubuntu coreutils base64
trả về giá trị được mã hóa neo4j:@N
là as bmVvNGo6QE4K
(khác với ký tự cuối cùng) nhưng vẫn giải mã chính xác;
$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N
Tại sao lại thế này? Tôi cần làm gì để có được mã hóa nhất quán?
=
trong Base64 bình thường là phần đệm (và chỉ hợp lệ ở cuối). Thực tế là một chuỗi được mã hóa có phần đệm và chuỗi kia không (hay nói chung hơn là hai chuỗi có số lượng đệm khác nhau) là một tặng cho rằng hai chuỗi có độ dài khác nhau và do đó không thể giống hệt nhau.