2010-07-17 54 views
0

我想制作一个链接到社交引擎数据库的其他注册页面,但是当我MD5密码并将其存储在se_users表中时,用户无法登录,我相信社交引擎有另一种加密方法,有人可以给我一个函数来加密社交引擎的方式吗?社交引擎密码加密帮助

这是他们的功能,但我不知道如何实现它在我的脚本:

function user_password_crypt($user_password) 
{ 
global $setting; 

if(!$this->user_exists) 
{ 
    $method = $setting['setting_password_method']; 
    $this->user_salt = randomcode($setting['setting_password_code_length']); 
} 

else 
{ 
    $method = $this->user_info['user_password_method']; 
} 

// For new methods 
if($method>0) 
{ 
    if(!empty($this->user_salt)) 
    { 
    list($salt1, $salt2) = str_split($this->user_salt, ceil(strlen($this->user_salt)/2)); 
    $salty_password = $salt1.$user_password.$salt2; 
    } 
    else 
    { 
    $salty_password = $user_password; 
    } 
} 

$user_password_crypt = md5($salty_password); 

return $user_password_crypt; 
} 

感谢

+0

你的意思是哈希,而不是加密。 – igorw 2010-07-17 19:06:23

回答

1

他们追加和前面加上盐密码,他们通过MD5运行之前。

这是如何产生的盐,看起来像一个随机字符串,其长度在应用程序配置”

$this->user_salt = randomcode($setting['setting_password_code_length']); 

这里指定他们劈成两半一种盐,和密码之前把左侧,而右侧后”

list($salt1, $salt2) = str_split($this->user_salt, ceil(strlen($this->user_salt)/2)); 
$salty_password = $salt1.$user_password.$salt2; 

现在他们哈希密码咸鱼:

$user_password_crypt = md5($salty_password); 

为了正确解密,你必须做的是读取该用户的salt。

$username = $POST['username']; 
$password = $POST['password']; 
$user = get_user_from_database($username); 
list($salt1, $salt2) = str_split($user->salt, ceil(strlen($user->salt)/2)); 

$salted_password = md5($salt1.$password.$salt2); 

if($salted_password == $user->crypted_password) { 
    echo "Login successful"; 
} else { 
    echo "Invalid password"; 
} 

Here is the Wikipedia page关于密码学中的盐。

+0

嗨,感谢您的回答,但是如果生成的md5哈希将总是相同,如果它的一部分是随机代码? – 2010-07-17 19:14:47

+1

每次都不是随机的。第一次创建用户帐户时,会生成一个随机密码并随密码一起保存。每次获取用户信息时,他的盐都将与您第一次生成的字符串相同,而不是再次随机。 – 2010-07-17 19:52:06

0

几件事:

您是否正在存储用户密码的MD5散列?根据你发布的代码,社交引擎正在抨击哈希(一种防止彩虹表的方法)。

作为一个方面,MD5哈希不是密码安全的哈希密码方式。此外,在登录时对密码进行哈希处理,并且传输哈希并不比以纯文本传递密码更安全。为了安全地登录,您需要通过HTTPS进行登录(或通过加密密码进行更正确的登录)

3

社交引擎使用默认安全salt,用户salt和用户密码的组合来加密密码,所以您只需要结合这三个数据并转换成md5即可。

$ enc_password = md5('default_decurity_salt','user_password','user_salt');

EX。 - MD5('6e3cf54ce0aa10bb69d69926e82b62b3be9022b9','123456'。'3486524');?

它的工作。

+2

它对我的作品感谢一吨 – 2013-01-09 05:05:48

2

你可以试试这个

MD5( 'default_salt', 'user_salt', 'USER_PASSWORD');