【问题标题】:Using php to create a password system with chinese characters使用php创建汉字密码系统
【发布时间】:2010-04-14 12:57:45
【问题描述】:

我在验证中文字符与其他中文字符时遇到问题,例如,我正在创建一个简单的密码脚本,该脚本从数据库中获取数据,并通过 get 获取用户输入。

我遇到的问题是出于某种原因,即使当你回显它们时字符看起来完全一样,我的 if 语句仍然认为它们是不同的。

我尝试使用 htmlentities() 函数对字符进行编码,数据库中的密码很好地编码,给了我一个有效的 '& #35441;' (我在里面放了一个空格来阻止它转换成汉字!)。

另一个用户输入值给了我很多有趣的字符。我认为必须打破它的唯一一件事是它以不同的方式编码,因此 php 认为它是 2 个完全不同的字符串。

有人有什么想法吗?
在此先感谢,

编辑:
感谢各位的快速响应,我将四处寻找将数据库编码设置为 UTF-8,但是目前,数据库的结果不是问题,它们使用 htmlentities 正确编码,这是我得到的结果$_GET 是导致问题的原因。

干杯,

【问题讨论】:

  • 用于填充 $_GET 数组的编码是什么?如果它来自 HTML 表单,是否在指定正确编码的网页上?
  • Get 被禁止,这不仅在安全方面是个坏主意,而且还要求浏览器之间存在不一致问题。改用帖子。否认数据库有问题显然是错误的,如果它与您从客户端获得的值不一样,那就错了。
  • 您是如何设置密码的(即 GET(或 POST)/csv 等)?显然与您尝试验证的方式不同。

标签: php utf-8 html-entities


【解决方案1】:

对于密码,我的建议是不要进行直接比较,因为这意味着您将密码存储在明文中。至少在存储它们之前通过 MD5 或 SHA 之类的哈希(最好也使用盐值)运行它们。然后你只需要比较哈希值,通常是十六进制值,所以不应该导致任何编码问题。

对于非密码值,听起来您的数据库和 PHP 的编码不同,因此它们没有正确匹配。如果 MySQL 以您想要的方式存储它们,让它进行比较(而不是让它首先返回值),这应该避免 1 次通过似乎可能是问题的编码更改。

【讨论】:

    【解决方案2】:

    如果您想存储密码,请阅读:what you need to know about secure password schemes

    阅读后,您的根本问题似乎是您从用户收到的内容与您从数据库获得的内容之间的字符编码不匹配。 如果你使用的是Mysql和utf-8编码,是不是先用SET names "utf-8"查询?

    【讨论】:

      【解决方案3】:

      使用 SHA1 和 MD5 保存值可能会解决您的问题,正如其他人所说的那样。这也是一个安全的过程。这里有一个代码 sn-p 来帮忙。

      public function getHashedPassword()
      {
          $salt = 'mysalt';
          return  sprintf( "%d%s",$salt,sha1( sprintf( "%d%s", $salt,$this->_rawPassword) ));
      }
      

      比较后,重新对输入的密码进行哈希处理,并将其与数据库中保存的哈希密码进行比较。这样做可能会消除编码问题。

      【讨论】:

      • 嗨 Hanseh,是的,我尝试使用 md5 对字符串进行编码,但我仍然遇到同样的问题,当我回显密码时,我得到了 2 组完全不同的数字。
      【解决方案4】:

      由于您无论如何都应该存储密码的哈希值而不是密码本身,这可能是解决方案的一部分。您存储的是哈希而不是密码,因此数据库没有问题。

      也就是说,不同浏览器对它们提交的字符串进行编码的方式可能有所不同。这不是我很喜欢的东西,但你最好确保找到一个解决方案,在所有浏览器上生成完全相同的字符串。将 accept-charset 设置为 utf-8 很简单,您可能还想弄乱 enctype。

      【讨论】:

        猜你喜欢
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-13
        • 2018-08-22
        相关资源
        最近更新 更多