2013-08-14 4 views
27

मैं कोशिश की है:बेस 64 स्काला या जावा के साथ एन्कोडिंग

val md = java.security.MessageDigest.getInstance("SHA-1") 
val result = new sun.misc.BASE64Encoder().encode(md.digest("user:pass".getBytes)) 

परिणाम:

md: java.security.MessageDigest = SHA-1 Message Digest from SUN, <initialized> 
result: String = smGaoVKd/cQkjm7b88GyorAUz20= 

मैं भी करने की कोशिश की:

import java.net.URLEncoder 
val result = URLEncoder.encode(user + ":" + pass, "UTF-8") 

परिणाम:

result: String = user%3Apass 

http://www.base64encode.org/ मूल्य मैं परिणाम के लिए इच्छुक हूँ के आधार पर "dXNlcjpwYXNz"

क्या साइट इन एन्कोडिंग से अलग ढंग से कर रहा है होना चाहिए? इसके अलावा, मैं जावा/स्कैला में साइट की नकल कैसे कर सकता हूं?

नोट, विशिष्ट एप्लिकेशन मूल प्रमाणीकरण का उपयोग करके शीर्षलेख के लिए है।

+1

यदि आप अपना खुद का बनाना चाहते हैं तो मेरे पास कुछ उदाहरण है, मैंने स्केल के लिए बेस 64 बनाया [https://github.com/Try-Parser/Base64-encryption ](https://github.com/Try-Parser/ बेस 64-एन्क्रिप्शन) – HuntsMan

उत्तर

12

"उपयोगकर्ता: पास" को "dXNlcjpwYXNz" प्राप्त करने के लिए, आपको UTF-8 एन्कोडेड स्ट्रिंग बेस 64-एन्कोडिंग होना चाहिए, लेकिन हैशिंग नहीं है।

तीसरे पक्ष के अमरूद पुस्तकालय का उपयोग करना, मैं

System.out.println(BaseEncoding.base64() 
    .encode("user:pass".getBytes(Charsets.UTF_8))); 

चला सकते हैं और के रूप में अनुरोध मैं

dXNlcjpwYXNz 

बाहर निकलना। अन्य बेस 64 एन्कोडर्स को समान रूप से काम करना चाहिए।

+1

(इसके अलावा, 'URLEncoder' के साथ आपका दूसरा संस्करण वास्तव में किसी भी हैशिंग ... या बेस 64 एन्कोडिंग नहीं दिखता है ...) –

+0

धन्यवाद! वह सही था। दूसरे उदाहरण के लिए, यह उन कुछ उत्तरों को रद्द करने में मदद करने के लिए था जो अन्य समान प्रश्नों पर फेंक दिए गए हैं। –

58

जावा 8 के बाद से मानक लाइब्रेरी में सीधे उपयोगिता वर्ग हैं: Base64.Decoder और Base64.EncoderBase64 कक्षा में बेस 64 के विभिन्न स्वादों के लिए बेस 64 एन्कोडिंग/डिकोडिंग करने वाले इन वर्गों के उदाहरण बनाने के लिए कुछ स्थैतिक फैक्ट्री विधियां भी हैं।

यह कैसे एनकोडर उपयोग करने के लिए है:

import java.util.Base64 
import java.nio.charset.StandardCharsets 

Base64.getEncoder.encodeToString("user:pass".getBytes(StandardCharsets.UTF_8)) 
+0

उपयुक्त जावा 7 विकल्प क्या है? –

9

स्काला में पूछा गया था:

import java.nio.charset.StandardCharsets 

val (password, expected) = ("user:pass".getBytes(StandardCharsets.UTF_8), "dXNlcjpwYXNz") 

assume(java.util.Base64.getEncoder.encodeToString(password)==expected) 
4

आप scalaj (मैं गया था) का उपयोग कर रहे हैं, तो आप बस यह कर सकते हैं:

import scalaj.http.Base64 

Base64.encodeString(str) 

या

import scalaj.http.HttpConstants._ 

base64(str) 
संबंधित मुद्दे