Zazwyczaj używałem biblioteki bcrypt do tworzenia hashowania hasłem, ale nie jestem w stanie tego zrobić z powodu korzystania z biblioteki syscall
. Próbowałem również scrypt. Jakie inne sposoby są bezpieczne i jaki byłby najlepszy sposób?Golang/App Engine - bezpieczna haszowanie hasła użytkownika
Odpowiedz
Spójrz na go.crypto. Oferuje wsparcie dla pbkdf2 i bcrypt. Obie implementacje są napisane wyłącznie w Go i powinny działać na GAE dobrze.
Najprostszym w użyciu jest prawdopodobnie bcrypt. Aby uzyskać przebieg pakiet:
go get golang.org/x/crypto/bcrypt
Przykład użycia:
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))
Wyjście będzie coś takiego:
$2a$10$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e
Jeśli chcesz po prostu skrótu, należy użyć PBKDF2. Przykład:
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))
dlaczego "odroczyć wyczyść (hasło)" konieczne? –
@HelinWang To nie jest tak, ale lubię nadpisywać pamięć, w której przechowywano hasło w postaci zwykłego tekstu. – nemo
dziękuję, to interesujący punkt. –
- 1. Jak mogę przekonwertować haszowanie hasła z MD5 na SHA?
- 2. Google App Engine: bezpieczna komunikacja między aplikacjami
- 3. Maksymalna długość hasła użytkownika MySQL
- 4. Zmiana hasła dla użytkownika npm
- 5. Przekazywanie nazwy użytkownika i hasła do svcutil.exe?
- 6. ActiveAdmin - Edycja Odnajdź użytkownika bez zmiany hasła
- 7. Laravel 5 - walidator dla bieżącego hasła użytkownika
- 8. Sprawdzanie nazwy użytkownika i hasła w Androidzie
- 9. Devise Przypomnienie hasła dla zalogowanego użytkownika
- 10. Zmiana hasła w MongoDB dla istniejącego użytkownika
- 11. Zmiana hasła użytkownika Linuksa ze skryptu PHP
- 12. Zmiana hasła użytkownika w ASP.NET Forms Authentication
- 13. Sails.js Model użytkownika nie usuwa hasła
- 14. Brak hasła dla użytkownika "postgres" error
- 15. Zmiana domyślnej nazwy użytkownika/hasła w RockMongo
- 16. Tworzenie użytkownika bez hasła w Meteor
- 17. Czy funkcja dostarczana przez użytkownika terminate() ma być wątkowo bezpieczna?
- 18. Znajdź zatwierdzenie przez haszowanie SHA w Git
- 19. Dołącza haszowanie commit git w wersji jar
- 20. Bezpieczna kontrola wersji
- 21. Czy java jest bezpieczna?
- 22. Jak bezpieczna jest funkcja PDP PDO: lastInsertId?
- 23. Przechowywanie hasła
- 24. Czy ta sesja logowania jest bezpieczna?
- 25. Devise Niepotwierdzenie hasła/potwierdzenie hasła
- 26. Wysyłanie nazwy użytkownika i hasła do usługi WWW
- 27. Połączenie z Oracle bez nazwy użytkownika lub hasła
- 28. Wywołanie API REST z nazwy użytkownika i hasła - jak
- 29. Użyj nazwy użytkownika i hasła do połączenia ActiveMQ JMS
- 30. Jak podłączyć enkoder hasła do interfejsu użytkownika w Silex?
O ile jestem w stanie powiedzieć, bibliotekę scrypt na http://code.google.com/p/go/source/browse/scrypt/scrypt.go?repo=crypto robi” t użyj 'syscall'. – Intermernet
Hmm. Próbowałem, i mam ten sam błąd. Myślę, że lib pbkdf2 go używa - jeśli spróbuję, to też umiera. – benkraus