Base64 çıktısında neden bir tutarsızlık var?


12

Lubuntu 15.04 java tabanlı neo4j grafik veritabanı kullanıyorum.

Neo4j HTTP kimlik doğrulama başlığı 'username: password' (tırnak işaretleri hariç) base64 kodlamasını kullanır. Wireshark kullanarak neo4j tarafından üretilen base64 kodunu görebilirsiniz.

Ancak aynı dizeyi kodlamak için ubuntu coreutils base64 kullanırsam biraz farklı bir kodlama alırım. Bu kodlama neo4j tarafından kabul edilmez.

Her iki kodlama da doğru kullanıcı adına kod çözülür: şifre dizesi

Misal

kullanıcı adı = neo4jve şifre =@N

Neo4j ait kodlanmış değerini verir neo4j:@Nolarak bmVvNGo6QE4=çözdüğü neo4j:@Nbeklendiği gibi

$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N

Ubuntu coreutils base64kodlanmış değerini (son karakterde farklılık gösterir) neo4j:@Nolarak döndürür, bmVvNGo6QE4Kancak yine de kodunun doğru şekilde çözülmesini sağlar;

$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N

Bu neden? Tutarlı kodlama elde etmek için neye ihtiyacım var?


3
Not =Normal Base64 bulunan dolgu (sonunda ve geçerlidir). Kodlanmış bir ipin dolguya sahip olması ve diğerinin (veya daha genel olarak, iki ipin farklı miktarlarda dolguya sahip olması), ikisinin farklı uzunlukta olduğu ve bu nedenle muhtemelen aynı olamayacağı ölü bir hediyedir .
CVn

Yanıtlar:


57

Farklı dizeleri (biraz) kodluyorsunuz:

$ echo 'bmVvNGo6QE4=' | base64 --decode | od -c
0000000   n   e   o   4   j   :   @   N
0000010
$ echo 'neo4j:@N' | od -c
0000000   n   e   o   4   j   :   @   N  \n
0000011

echosondaki satırsonu karakteri ekler. Bu, farklı kodlamalara yol açar.

printfBunun yerine, çıktı özellikleri daha kesin olan kullanın :

$ printf '%s' 'neo4j:@N' | base64              
bmVvNGo6QE4=

10
Büyük cevap, iptal edildi. not da $ echo -n "neo4j:@N" | base64çalışır.
Doug Smythies

7
@ DooSmythies yapar, ancak printfçok daha tutarlıdırecho .
muru
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.