बेस 64 आउटपुट में असंगति क्यों है?


12

मैं 15.04 lubuntu पर जावा आधारित neo4j ग्राफ डेटाबेस का उपयोग कर रहा हूं।

Neo4j HTTP प्रमाणीकरण हेडर 'उपयोगकर्ता नाम: पासवर्ड' के base64 एन्कोडिंग का उपयोग करता है (उद्धरण सहित नहीं)। वायरशर्क का उपयोग करके मैं neo4j द्वारा निर्मित बेस 64 कोड देख सकता हूं।

हालाँकि, अगर मैं एक ही स्ट्रिंग को एनकोड करने के लिए ubuntu coreutils base64 का उपयोग करता हूं तो मुझे थोड़ा अलग एन्कोडिंग मिलता है। इस एन्कोडिंग को neo4j द्वारा स्वीकार नहीं किया गया है।

दोनों एन्कोडिंग सही उपयोगकर्ता नाम: पासवर्ड स्ट्रिंग को डिकोड करते हैं

उदाहरण

उपयोगकर्ता नाम = neo4jऔर पासवर्ड =@N

Neo4j की एन्कोडेड मूल्य देता है neo4j:@Nके रूप में bmVvNGo6QE4=करने के लिए जो डीकोड neo4j:@Nअपेक्षा के अनुरूप

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

उबंटू coreutils base64रिटर्न के एन्कोडेड मूल्य neo4j:@Nके रूप में bmVvNGo6QE4K(जो पिछले चरित्र में अलग है), लेकिन अभी भी सही ढंग डीकोड;

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

ऐसा क्यों है? सुसंगत एन्कोडिंग प्राप्त करने के लिए मुझे क्या करने की आवश्यकता है?


3
ध्यान दें कि =सामान्य बेस 64 में पेडिंग है (और केवल अंत में मान्य है)। तथ्य यह है कि एक एन्कोडेड स्ट्रिंग में पैडिंग है और दूसरा (या आमतौर पर, दोनों स्ट्रिंग्स में अलग-अलग मात्रा में पेडिंग नहीं है) एक मृत सस्ता है कि दोनों अलग-अलग लंबाई के हैं और इस तरह संभवतः समान नहीं हो सकते।
बजे एक CVn

जवाबों:


56

आप विभिन्न स्ट्रिंग्स को एन्कोडिंग (थोड़ा) कर रहे हैं:

$ 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

echoएक अनुगामी न्यूलाइन वर्ण जोड़ता है। यह अलग-अलग एनकोडिंग की ओर जाता है।

printfइसके बजाय उपयोग करें , जिसका आउटपुट विनिर्देश अधिक सटीक है:

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

10
शानदार जवाब, उत्थान। ध्यान दें कि $ echo -n "neo4j:@N" | base64काम भी करता है।
डग स्माइथीज

7
@DougSmythies यह करता है, लेकिन printfकहीं अधिक सुसंगत हैecho
मूरू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.