2013-08-31 11 views
10

मैंने आमतौर पर पासवर्ड हैशिंग करने के लिए bcrypt लाइब्रेरी का उपयोग किया है, लेकिन लाइब्रेरी के syscall के उपयोग के कारण ऐसा करने में असमर्थ हूं। मैंने भी स्क्रिप करने की कोशिश की है। अन्य तरीके सुरक्षित हैं, और कौन सा सबसे अच्छा तरीका होगा?गोलांग/ऐप इंजन - सुरक्षित रूप से उपयोगकर्ता का पासवर्ड हैशिंग

+0

जहाँ तक मुझे http://code.google.com/p/go/source/browse/scrypt/scrypt.go?repo=crypto पर scrypt पुस्तकालय बताने के लिए नहीं करता है 'में सक्षम हूँ के रूप में टी 'syscall' का उपयोग करें। – Intermernet

+0

हम्म। मैंने कोशिश की, और मुझे एक ही त्रुटि मिलती है। मुझे लगता है कि pbkdf2 lib इसका उपयोग कर रहा है - अगर मैं कोशिश करता हूं, तो यह भी मर जाता है। – benkraus

उत्तर

14

go.crypto पर एक नज़र डालें। यह pbkdf2 और bcrypt के लिए समर्थन प्रदान करता है। दोनों कार्यान्वयन पूरी तरह से गो में लिखे गए हैं और जीएई पर काम करना ठीक है।

उपयोग करने के लिए सबसे आसान शायद bcrypt है।

go get golang.org/x/crypto/bcrypt 

उदाहरण उपयोग: पैकेज रन प्राप्त करने के लिए

import "golang.org/x/crypto/bcrypt" 

func clear(b []byte) { 
    for i := 0; i < len(b); i++ { 
     b[i] = 0; 
    } 
} 

func Crypt(password []byte) ([]byte, error) { 
    defer clear(password) 
    return bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) 
} 

ctext, err := Crypt(pass) 

if err != nil { 
    log.Fatal(err) 
} 

fmt.Println(string(ctext)) 

उत्पादन कुछ इस तरह होगा:

$2a$10$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e 

आप बस हैश, उपयोग PBKDF2 चाहते हैं। उदाहरण:

import "golang.org/x/crypto/pbkdf2" 

func HashPassword(password, salt []byte) []byte { 
    defer clear(password) 
    return pbkdf2.Key(password, salt, 4096, sha256.Size, sha256.New) 
} 

pass := []byte("foo") 
salt := []byte("bar") 

fmt.Printf("%x\n", HashPassword(pass, salt)) 
+0

'स्पष्ट (पासवर्ड) 'क्यों जरूरी है? –

+1

@ हेल्विनवांग यह नहीं है, लेकिन मैं उस स्मृति को ओवरराइट करना चाहता हूं जहां सादे पाठ पासवर्ड रखा गया था। – nemo

+0

धन्यवाद, यह एक दिलचस्प बात है। –

संबंधित मुद्दे