关于我的密码哈希算法php mysql corona sdk的一些反馈

关于我的密码哈希算法php mysql corona sdk的一些反馈,php,mysql,hash,password-encryption,Php,Mysql,Hash,Password Encryption,我的网站还没有投入生产,我想在上线前得到一些关于密码散列的建议,而且很难改变。一般来说,我的网站托管在EC2上,将使用AmazonRDS。我将进行安全设置,因此访问数据库的唯一方法是连接到EC2机器。我的网站不会存储任何真正敏感的财务数据,但它肯定会存储电子邮件地址和密码,而且我很可能会允许paypal交易,因此用户的电子邮件地址通常也是paypal地址 我使用哈希算法的部分原因是因为我正在使用Corona SDK构建一个应用程序。我计划在客户端和服务器上使用类似的哈希函数。例如,我可以在客户端

我的网站还没有投入生产,我想在上线前得到一些关于密码散列的建议,而且很难改变。一般来说,我的网站托管在EC2上,将使用AmazonRDS。我将进行安全设置,因此访问数据库的唯一方法是连接到EC2机器。我的网站不会存储任何真正敏感的财务数据,但它肯定会存储电子邮件地址和密码,而且我很可能会允许paypal交易,因此用户的电子邮件地址通常也是paypal地址

我使用哈希算法的部分原因是因为我正在使用Corona SDK构建一个应用程序。我计划在客户端和服务器上使用类似的哈希函数。例如,我可以在客户端对密码进行散列,然后通过ssl将散列后的密码发送到服务器。顺便说一句,我永远不会在客户端上存储用户的密码(哈希或非哈希)

一般问题

  • 如果我允许用户通过移动应用程序登录,那么最好先散列数据,然后通过SSL发送数据,还是准确地获取用户输入的数据,然后通过SSL发送数据。我关心的是在客户端公开我的哈希算法是否真的是个坏主意。最好相信SSL是安全的,而不是原始发送数据
  • 对于改进我用来散列和存储数据的方法,你有什么建议吗。更多详情见下文
所以一般的想法是,当用户注册时,我为每个用户创建一个唯一的userkey。此密钥存储在数据库中。电子邮件地址使用此密钥加密,密码使用同一密钥散列

$key = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM); 
密码散列是使用以下函数创建的

function hash_string($data,$key) {
    $hash = hash_hmac('md5', $data, $key);
    for ($i = 1; $i <= 100; $i++) {
        $data = $hash . $data . $key;
        $hash = hash_hmac('md5', $data, $key);
    }   
    $hash = base64_encode($hash);
    return $hash;
}

我在不同的地方发现了这些函数,我对安全性不太了解,所以我只是想得到一些反馈。

您将用于加密的密钥存储在与加密信息相同的数据库中吗?那么,一旦有人访问了您的数据库,信息和密钥(从此加密本身)就没有意义了。省事吧


对于密码散列,有很多关于这方面的讨论,同样好的是,您可能应该远离MD5,使用更好的salt。

您将用于加密的密钥存储在与加密信息相同的数据库中?那么,一旦有人访问了您的数据库,信息和密钥(从此加密本身)就没有意义了。省事吧

对于密码散列,有很多关于它的讨论,同样好的是,您可能应该远离MD5,使用更好的salt

function encrypt_text($key,$string)
{
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  
    $encrypttext = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_ECB, $iv));
    return $encrypttext;
}