2016-02-05 24 views
5

Tôi có hai ứng dụng, một trong Laravel 5.2 và một trong Meteor. Tôi muốn thu thập băm cho mật khẩu tương thích với cả hai nền tảng.Ghép mật khẩu Laravel & Meteor

Cơ sở dữ liệu lưu trữ băm riêng

  • password cho Laravel.
  • meteor_password cho thiên thạch.

Cả hai nền tảng sử dụng bcrypt với 10 vòng theo mặc định, nhưng Meteor xuất hiện để sha256 mật khẩu thuần trước bcrypt.

Nếu Meteor tạo mật khẩu băm abc, tôi có thể SHA256 mật khẩu đơn giản, và so sánh nó với abc sử dụng internals Laravel của, ví dụ: Auth::attempt()

$sha256 = hash('sha256', $request->get('password'), false); 

này hoạt động. Laravel xác thực thành công người dùng.

Tuy nhiên, nếu tôi đăng ký người dùng mới trong Laravel và lưu trữ mã băm meteor_password, khi xác thực đối với băm đó trong Meteor, nó không thành công với thông báo lỗi "Đăng nhập bị cấm". This error appears to be mean incorrect credentials.

Tôi đang tạo hàm băm giống như cách tôi đã làm khi xác minh trong Laravel.

$meteor_password = bcrypt(hash('sha256', $plain, false)); 

Có vẻ lạ khi nó hoạt động theo cách này chứ không phải cách khác nên tôi cho rằng tôi đang thiếu thứ gì đó.

Trả lời

3

Năm 2011, một lỗi được phát hiện trong việc thực hiện bcrypt PHP, vì vậy họ changed phiên bản 2a gốc chỉ để 2x2y, được sử dụng ngày hôm nay, để cho biết rằng các mật khẩu đã được băm bằng phiên bản cố định.

Do đó, băm được tạo bởi PHP 2y phải giống hệt số băm được tạo bởi nút 2a.

Tiền tố phải được thay đổi để được xử lý chính xác bởi mô-đun NPM (được sử dụng bởi Meteor), vì nó does not acknowledge 2y.

$meteor_password = bcrypt(hash('sha256', $plain, false)); 
// replace it useing something like: 
$meteor_password = str_replace('$2y', '$2a', $meteor_password); 
// or 
$meteor_password[2] = 'a'; 
+0

Phát hiện, hoạt động như mong đợi. Cảm ơn các liên kết; đọc thú vị. –

+0

Tuyệt vời. BTW, yếu tố "chi phí" là theo cấp số nhân, vì vậy chi phí là 10, trên thực tế, (2^10 =) 1024 viên đạn, chứ không phải 10 :) – MasterAM

Các vấn đề liên quan