10/10/2018, 10:48

[Help] Làm sao để chuyển phần mã hóa pass của vBulletin

Xin các bạn giúp mình với, hiện nay mặc định của forum vBulletin 4.0.5 sử dụng hệ thống mã hóa MD5 để mã hóa phần password cho việc đăng nhập. Mình lại có nhu cầu sử dụng hệ thống mã hóa base64_encode cho phần password đó vậy mình sẽ phải chỉnh lại ở những file nào trong forum ? Xin các pro chỉ mình với...Thank
minhsonjp viết 12:49 ngày 10/10/2018
Nếu bạn không có ý định xem password của user là gì thì nên giữ nguyên cách mã hóa mặc định của vBu. Bởi vì việc giải mã MD5 sẽ khó khăn hơn so với việc giải BASE64_ENCODE (qua hàm BASE64_DECODE).
VnVision viết 12:59 ngày 10/10/2018
Được gửi bởi minhsonjp
Nếu bạn không có ý định xem password của user là gì thì nên giữ nguyên cách mã hóa mặc định của vBu. Bởi vì việc giải mã MD5 sẽ khó khăn hơn so với việc giải BASE64_ENCODE (qua hàm BASE64_DECODE).
Ng ta có ý định xem password của user thì mới muốn đổi sang dùng base64 chứ ko đổi làm gì? :P
@chủ topic: nếu bạn định dùng base64 để mã hóa thì tốt nhất là bỏ luôn hẳn mã hóa đi mà lưu password y nguyên vào database. Sẽ đỡ được chút ít thời gian của bạn & ng khác (hacker...) khi muốn xem mật khẩu thành viên.
Trịnh Ngọc Lan viết 12:52 ngày 10/10/2018
Vậy khỏi mã hóa gì luôn đâu cho nó gọn
kennymask viết 13:02 ngày 10/10/2018
vấn đề không phải mình muốn xem pass của các bạn trong diễn đàn mà vấn đề ở đây mình muốn đồng bộ phần password giữa diễn đàn và database của game server ! vì hiện game server của mình đang sử dụng chuẩn mã base64 để mã hóa pass....việc trên giúp cho các thành viên vào diễn dàn không cần phải tạo lại account giúp việc trao đổi thuận tiện thêm. Và nhất là mình ko hề có khái niệm xem pass của ai...mong các bạn pro giúp cho. Mình cần điều chỉnh tại những file nào để có thể thực hiện việc mình muốn.
VnVision viết 13:04 ngày 10/10/2018
Vậy việc bạn cần làm ko phải là sửa lại phần mã hóa của vbb mà là sửa lại phần mã hóa = base64 của game server. Bởi base64 không thể gọi là mã hóa được.
thuyduongcd viết 12:54 ngày 10/10/2018
Sử dụng mã nguồn mở điều tối kỵ nhất là can thiệp vào core. Nếu sau này upgrade lên phiên bản mới thì file cũ sẽ bị đè lên. Như vậy là tiêu.
việc trên giúp cho các thành viên vào diễn dàn không cần phải tạo lại account giúp việc trao đổi thuận tiện thêm
Việc này cũng không cần thay đổi mã hóa làm gì. Mỗi khi đăng user đăng ký account game, thêm đoạn script tự động add user đó vào diễn đàn. Phần password thì cứ lấy password của game decode ra dạng thường, xong rồi encode ra pass của VB.
Code:
$gamepass="abc"; // password của game đã decode
$usersalt="XYZ"; //dùng random để lấy 3 ký tự ngẫu nhiên
$forumpass = md5(md5($password_text) . $usersalt);
Trong đó $usersalt là 3 ký tự ngẫu nhiên. Khi add vào DB bạn nhớ add đồng thời 3 ký tự này vào côt salt của user table.
Vậy là đồng bộ rồi.

Còn nếu bạn vẫn giữ nguyên ý định thay đổi trong VB thì search trong source tìm dòng
Code:
$password_hash = md5(md5($password_text) . $user_salt);
(lâu quá không xài VB nữa nên không nhớ nó nằm trong file nào)
Tìm được rồi thì thay bằng kiểu mã hóa bạn muốn. Nhưng lưu ý là điều này sẽ rất nguy hiểm và bạn sẽ phải tự chịu trách nhiệm về việc mình làm.
kennymask viết 13:02 ngày 10/10/2018
hic hic trong phần pass mà client của game mình check từ server được viết bằng java có những đoạn check như sau.(Hiện tại mình đã biết cách đưa pass md5 vào cả 2 database rồi có nghĩa là pass đăng ký ngoài diễn đàn và pass trang chủ của game thì work rồi = md5). Nhưng ngược lại client không check được pass login vào server vì code check như sau
---------------
public void setPasswordHash(String passwordHash)
{
this.passwordHash = passwordHash;
}
---------------
if(name != null ? !name.equals(account.name) : account.name != null)
{
return false;
}

return !(passwordHash != null ? !passwordHash.equals(account.passwordHash) : account.passwordHash != null);

}
---------
public int hashCode()
{
int result = name != null ? name.hashCode() : 0;

result = 31 * result + (passwordHash != null ? passwordHash.hashCode() : 0);

return result;
}
----------
/**
* Encodes password. SHA-1 is used to encode password bytes, Base64 wraps SHA1-hash to string.
*
* @param password
* password to encode
* @return retunrs encoded password.
*/
public static String encodePassword(String password)
{
try
{
MessageDigest messageDiegest = MessageDigest.getInstance("SHA-1");
messageDiegest.update(password.getBytes("UTF-8"));
return Base64.encodeToString(messageDiegest.digest(), false);
}
catch (NoSuchAlgorithmException e)
{
log.error("Exception while encoding password");
throw new Error(e);
}
catch (UnsupportedEncodingException e)
{
log.error("Exception while encoding password");
throw new Error(e);
}
}
bà con có ai rành JAVA giúp mình với nhé làm sao để chuyển hashCode() thành dạng md5 nữa là xong !Rất cám ơn mọi sự giúp đỡ

[=========> Bổ sung bài viết <=========]

Được gửi bởi thuyduongcd
Sử dụng mã nguồn mở điều tối kỵ nhất là can thiệp vào core. Nếu sau này upgrade lên phiên bản mới thì file cũ sẽ bị đè lên. Như vậy là tiêu.

Việc này cũng không cần thay đổi mã hóa làm gì. Mỗi khi đăng user đăng ký account game, thêm đoạn script tự động add user đó vào diễn đàn. Phần password thì cứ lấy password của game decode ra dạng thường, xong rồi encode ra pass của VB.
Code:
$gamepass="abc"; // password của game đã decode
$usersalt="XYZ"; //dùng random để lấy 3 ký tự ngẫu nhiên
$forumpass = md5(md5($password_text) . $usersalt);
Trong đó $usersalt là 3 ký tự ngẫu nhiên. Khi add vào DB bạn nhớ add đồng thời 3 ký tự này vào côt salt của user table.
Vậy là đồng bộ rồi.

Còn nếu bạn vẫn giữ nguyên ý định thay đổi trong VB thì search trong source tìm dòng
Code:
$password_hash = md5(md5($password_text) . $user_salt);
(lâu quá không xài VB nữa nên không nhớ nó nằm trong file nào)
Tìm được rồi thì thay bằng kiểu mã hóa bạn muốn. Nhưng lưu ý là điều này sẽ rất nguy hiểm và bạn sẽ phải tự chịu trách nhiệm về việc mình làm.
Hic hic cái java bên dưới nãy mình post cảm thấy phức tạp quá thôi thế này đi. Có thể hướng dẫn cho mình file nào qui định việc add data lấy từ bảng đăng ký vào database không.
Ý tưởng của mình là thế này đây. Khi member đăng ký trên diễn đàn mình setup cho phần password sẽ tạo 2 mã 1 md5 dành cho database diễn đàn, 1 base64 cho server data, mình sẽ thực hiện 2 động tác ghi này cùng một lúc. Giả dụ database của diễn đàn mình tên là Forum, tab qui định mặc định phần user của forum là user, còn database của server mình là Game, và tab qui định user cùa server là account. Khi member đ.ký ngoài diễn đàn (click nút submit)thì thông tin sẽ được cập nhật vào 2 chỗ user và account của 2 database cùng một lúc. Vậy có ai có thể hướng dẫn mình cách làm không mình có kiếm nhưng không biết file cụ thể nào qui định việc đó. Thật cám ơn sự trả lời của mọi người...
thuyduongcd viết 12:50 ngày 10/10/2018
thông tin sẽ được cập nhật vào 2 chỗ user và account của 2 database cùng một lúc
Thì cứ add user vào table user của VB, chỉ có 2 field cần lưu ý là passwordsalt vì nó có liên quan với nhau. Còn liên quan thế nào thì phía trên đã nói.
salt: 3 ký tự ngẫu nhiên
password = md5(md5($password_text) . $usersalt)
kennymask viết 13:01 ngày 10/10/2018
Được gửi bởi thuyduongcd
Thì cứ add user vào table user của VB, chỉ có 2 field cần lưu ý là passwordsalt vì nó có liên quan với nhau. Còn liên quan thế nào thì phía trên đã nói.
salt: 3 ký tự ngẫu nhiên
password = md5(md5($password_text) . $usersalt)
nhưng file nào chứa cái dòng password = md5.... này ???
Bài liên quan
0