Tôi thường sử dụng thư viện bcrypt để băm mật khẩu, nhưng không thể làm như vậy do sử dụng thư viện syscall
. Tôi cũng đã thử scrypt. Những cách khác là an toàn, và đó sẽ là cách tốt nhất?Golang/App Engine - bẻ khóa an toàn mật khẩu của người dùng
Trả lời
Hãy xem go.crypto. Nó cung cấp hỗ trợ cho pbkdf2 và bcrypt. Cả hai cách triển khai hoàn toàn được viết bằng Go và sẽ hoạt động tốt trên GAE.
Cách đơn giản nhất để sử dụng có lẽ là bcrypt. Để có được gói chạy:
go get golang.org/x/crypto/bcrypt
Ví dụ sử dụng:
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))
Đầu ra sẽ là một cái gì đó như thế này:
$2a$10$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e
Nếu bạn muốn chỉ đơn giản là băm, sử dụng pbkdf2. Ví dụ:
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))
tại sao 'trì hoãn rõ ràng (mật khẩu) 'cần thiết? –
@HelinWang Nó không phải nhưng tôi muốn ghi đè lên bộ nhớ mà mật khẩu văn bản thuần túy được giữ. – nemo
cảm ơn, đó là một điểm thú vị. –
- 1. PHP bẻ khóa mật khẩu
- 2. Tại sao mật khẩu người dùng không bị bẻ khóa trong quản trị django?
- 3. lưu trữ an toàn mật khẩu người dùng cục bộ trong ứng dụng di động jquery
- 4. Việc lưu tên người dùng/mật khẩu MySQL trong tệp php.ini có an toàn không?
- 5. Lưu trữ mật khẩu an toàn trong mã chương trình?
- 6. Mật khẩu từ xa an toàn (SRP) theo các điều khoản của người cư trú
- 7. mật khẩu được gửi qua bài đăng an toàn?
- 8. Apache htpasswd thay đổi mật khẩu an toàn
- 9. Cách lưu trữ mật khẩu trong angularjs an toàn
- 10. Cách an toàn để đặt lại mật khẩu hoặc cung cấp mật khẩu cũ
- 11. Thư viện/Chức năng để cho người dùng biết mật khẩu của họ an toàn như thế nào?
- 12. Mật mã khóa công khai với mật khẩu do người dùng chọn?
- 13. Xử lý an toàn khóa và mật khẩu của người dùng OAuth trong Tiện ích mở rộng của Chrome và Tiện ích Gmail
- 14. Mã hóa "mật khẩu" python an toàn nhất
- 15. Xóa mật khẩu an toàn trong bộ nhớ (Python)
- 16. tên người dùng & mật khẩu trong sqlite3
- 17. Độ dài mật khẩu người dùng tối đa của MySQL
- 18. Mã hóa bằng mật khẩu của người dùng
- 19. Bảo mật Ngoài Tên người dùng/Mật khẩu?
- 20. cách mở khóa tài khoản người dùng ASPNETDB sau khi khóa mật khẩu không đúng?
- 21. PHP/MySQL - Ký tự an toàn cho tên hiển thị/tên người dùng/mật khẩu, với PDO
- 22. Đường ray 3.1. Tạo một người dùng trong giao diện điều khiển bằng mật khẩu an toàn
- 23. Tên người dùng và mật khẩu có thể được gửi an toàn qua HTTPS thông qua thông số URL không?
- 24. Đường ray: Cách lưu trữ mật khẩu người gửi an toàn?
- 25. Nhận tên người dùng/mật khẩu của người dùng đã đăng nhập trong Windows
- 26. Đặt mật khẩu cho người dùng trong PhpMyAdmin trong Wamp
- 27. Truyền và bảo mật đúng mật khẩu của người dùng cho ứng dụng web
- 28. Google App Engine - Cookie an toàn
- 29. Mật khẩu người dùng hệ thống đã hết hạn
- 30. RNGCryptoServiceProvider tĩnh - Có an toàn và an toàn cho việc tạo phiên và mật khẩu ngẫu nhiên không?
Theo như tôi có thể nói thư viện mã hóa tại http://code.google.com/p/go/source/browse/scrypt/scrypt.go?repo=crypto doesn ' t sử dụng 'syscall'. – Intermernet
Hmm. Tôi đã thử nó, và tôi nhận được cùng một lỗi. Tôi nghĩ rằng pbkdf2 lib đang sử dụng nó - Nếu tôi thử điều đó, nó cũng chết. – benkraus