小编Anp*_*pan的帖子

密码哈希密码.Blowfish产生奇怪的输出

我在理解php的crypt函数方面有点麻烦.我的PHP版本是5.4.7.

我想使用crypt在数据库中存储salted密码,因为据我所知,使用md5哈希密码的开发人员将在现场进行赌注和烧毁.

我想使用blowfish alg来生成哈希.现在,根据php文档,如果用"$ 2y $"+成本(例如:"08")+"$"+ 22个字符盐(./0-9A-Za-z)调用它,则crypt使用blowfish .但是,这一点测试代码的输出让我很困惑:

echo "<pre>";
if (CRYPT_BLOWFISH == 1) {
    echo 'Blowfish SaltLen = 18:     ' . crypt('string that should be hashed', '$2y$08$123456789012345678') . "\n";
    echo 'Blowfish SaltLen = 19:     ' . crypt('string that should be hashed', '$2y$08$1234567890123456789') . "\n";
    echo 'Blowfish SaltLen = 20:     ' . crypt('string that should be hashed', '$2y$08$12345678901234567890') . "\n";
    echo 'Blowfish SaltLen = 21:     ' . crypt('string that should be hashed', '$2y$08$123456789012345678901') . "\n";
    echo 'Blowfish SaltLen = 22: …
Run Code Online (Sandbox Code Playgroud)

php passwords crypt blowfish password-hash

17
推荐指数
1
解决办法
3811
查看次数

PHP类只包含常量

首先:我试图谷歌它,但我大多只发现有关如何在常量和其他无关信息中定义数组的讨论.

我有一个问题,一个解决方案,使我的代码更可读(和漂亮),只是发生在我身上.基本上我有大多数函数返回一个状态代码,表示成功,或者,如果出现问题,返回错误代码.为此,我创建了一个名为"StatusCode"的类,它只包含常量,如下所示:

<?php
class StatusCode {
  const success = 0;
  const badArgument = -1;
  const badQuery = -2;
  const outOfMana = -3; //Really just for demonstration purposes
  ...
}
Run Code Online (Sandbox Code Playgroud)

目的是让魔术数字从我的代码中消失,并清楚地说明出了什么问题而不必在某处寻找解释:

if (mana > 10) {
  //Do some magic
  return StatusCode::success;
}
else {
  //Oh god this is not good!
  return StatusCode::outOfMana;
}
Run Code Online (Sandbox Code Playgroud)

它还应该消除意外使用重复错误代码的可能性.我很确定这会给我的应用程序增加一些小的开销,但是让我的代码更易于理解.是否有一些惊天动地的理由不这样做?也许更好的办法呢?

(我已经避免使用这种define(CONSTANT, "value")方法,因为它看起来不那么漂亮,而且在我的德语键盘上写一个麻烦:))

php oop coding-style

17
推荐指数
1
解决办法
3945
查看次数

CSS媒体查询,像素密度,桌面和移动设备

情况:
我有5个CSS文件:

  • base.css,其中一些样式适用于所有地方

  • 339px.css,宽度可达339px

  • 639px.css,宽度最大为639px

  • 999px.css和

  • bigscreen.css适用于宽度超过999像素的任何东西

代码:

<link rel="stylesheet" type="text/css" media="all" type="text/css" href="css/base.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width:    0px) and (max-width: 339px)" href="css/339px.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width:  340px) and (max-width: 639px)" href="css/639px.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width:  640px) and (max-width: 999px)" href="css/999px.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width: 1000px)" href="css/bigscreen.css" />
Run Code Online (Sandbox Code Playgroud)

这一切都很好,并且在设备屏幕上1 css像素等于1/96英寸(2.54cm)的任何设备上都能完美运行.然而,最近许多显示设备的像素密度远高于此,因此当339px.css合适时,它们应用于639px.css.这是一个问题,因为内容看方式太小.

另请注意,我不能使用JavaScript和台式计算机schould总是根据宽度获取相应的css文件,无论方向如何.

我想要实现的目标:

  • 339px.css适用于任何设备:
    • 宽度<= 339px
    • 一个高分辨率但小屏幕(例如我的Android智能手机,1280x720但5.7英寸屏幕)和纵向.

基本上不是css像素,我想要一个相对于设备像素密度的单位(桌面,平板电脑,智能手机,4k显示器,"Retina"显示器,你明白了)并且可以同时使用所有主流浏览器移动和桌面平台.

与此同时,我还需要为旧版浏览器支持css像素.

这给了我一个令人头疼的问题.据我所知,您可以使用device-pixel-ratio,但我没有成功地在某些时候(两个css文件处于活动状态的区域,例如339px.css和639px.css)中使css文件"重叠".

我没办法.我已经试过的组合min-width,max-width, …

css media-queries responsive-design

13
推荐指数
1
解决办法
1万
查看次数

用于用户和组访问控制的MySQL数据库模式

我一直在努力找到这个问题的解决方案,现在我已经几乎无法想出一些有效的方法.问题如下:

我目前正在开发一个统计工具,显示一些应用程序的图形和数据.显然需要限制对这些数据的访问,因为用户A拥有应用程序"一"和"二",并且不能看到"三"或"四".

现在,每个用户可以是多个组的成员并从该组继承权限,但也可以拥有单独的权限.必须为每个应用程序设置这些权限.在以下情况下,可以访问一个应用程序的一组数据:

  • 用户自己有权访问该应用程序的这条数据
  • 用户所属的任何一个组都有权访问此应用程序的这段数据

http://i.stack.imgur.com/y4W6E.png

目标是创建一个表,该表存储每个用户当前对每个应用程序的实际权限,根据组成员身份和个人权限计算,并且由于与其他表的关系,该信息始终保持一致.

我不知道这是否有助于找到解决方案,但这里是获取id为1的用户当前活动权限的SQL:

(
SELECT u.perm_id AS perm, u.user_id AS uid, u.app_id AS app
FROM daUsers_has_daPermissions AS u
WHERE u.user_id = 1
)
UNION
(
SELECT g.perm_id AS perm, u.user_id AS uid, g.app_id AS app
FROM daUsers_has_daPermissions AS u, daUsergroup_has_daPermissions AS g, daUsergroup_has_daUsers AS g_has_u
WHERE u.user_id = 1
AND u.user_id = g_has_u.user_id
AND g.group_id = g_has_u.group_id
);
Run Code Online (Sandbox Code Playgroud)

这就是我想要存储在一个额外的表中(仅适用于所有用户).

mysql access-control

9
推荐指数
1
解决办法
6183
查看次数