php商业加密v5,PHP 5.5新的加密函数-password_hash()

PHP 5.4刚刚发布4个月,现在来谈论下一个版本的PHP,可能为时过早,但是在 PHP的内部邮件列表中,这个话题现在很火。

PHP 5.5目前还处于早期发展阶段,最终他会成什么样子,现在没人会知道,下面 只是总结人们对PHP 5.5的期望,但是PHP 5.5并不会包含下面所有的内容。

简单的来说,有4个比较重要的功能点:

一个简单的密码hash函数

类型约束检测 (Scalar typehinting)

Getters and seters (属性)

生成器 (Generators)

其他的很多细节:

不支持Windows XP和2003

PHP 5.5将不再支持Windows XP和2003系统,这些系统太老了。

/e修饰符定义为过时的

/e修饰符被设置之后 preg_replace()在进行了对替换字符串的后向引用替换之后, 将替换后的字符串作为php代码评估执行(eval函数方式), 并使用执行结果作为实际 参与替换的字符串. 单引号, 双引号, 反斜线(\)和NULL字符在 后向引用替换时会 被用反斜线转义。

这将会导致安全问题,作为替代,应该使用preg_replace_callback函数。

boolval()

PHP已经实现了strval, intval, floatval函数,转换为bool类型的boolval函数将会被添加。 他和(bool)的转换是一样的,但是他可以作为回调函数使用。

array_column()

array_colume或者array_pluch函数将会表现如下:

$userNames = array_column($users, 'name');

// 等同于下面代码

$userNames = [];

foreach ($users as $user) {

$userNames[] = $user['name'];

}

一个简单的密码hash函数

最近很多大型网站泄漏密码(注意这个的泄漏密码不是国内的各种密码门,老外才不关心国内呢,在国外也 有很多类是国内的密码泄漏事件),对于密码我们一直提倡使用bcrypt进行加密,但还是有很多人使用不 安全的sha1哈希。(国内、外的密码泄漏,虽然都是泄漏,但国外泄漏是被哈希过的密码,而国内直接是 明文)

我估计这可能是使用crypt函数太困难的(sha1, md5的确很简单),因为我们需要一个简单而且安全的密码 哈希函数:

$password = "foo";

// 创建一个密码哈希

$hash = password_hash($password, PASSWORD_BCRYPT);

// 验证一个密码

if (password_verify($password, $hash)) {

// 密码正确!

} else {

// 密码错误!

}

新的密码哈希有更多的更能,这里是 RFC 概述。

常量引用 (Constant dereferencing)

“Constant dereferencing” 是指可以直接用操作数组的方式来操作字符串,看下面2个例子:

function randomHexString($length) {

$str = '';

for ($i = 0; $i < $length; ++$i) {

$str .= "0123456789abcdef"[mt_rand(0, 15)]; // direct dereference of string

}

}

function randomBool() {

return [false, true][mt_rand(0, 1)]; // direct dereference of array

}

我不认为应该使用该特性,但他让语言语法多了一点。查看 RFC

empty()函数将支持参数是一个函数调用(和其他表达式)

目前的empty()函数的参数只能是一个变量,PHP 5.5中将支持emtpy($this->getFriends())这样使用,在之前的版本 这将会抛出一个错误。查看 RFC

获取完整的类名

PHP 5.3中增加了命名空间的特性。就导致下面代码的问题:

use Some\Deeply\Nested\Namespace\FooBar;

// 这个代码不能工作,因为他会在全局中查找FooBar类,显然这是找不到的

$reflection = new ReflectionClass('FooBar');

为了解决这个问题引入一个新的语法FooBar::class返回完整的类名

use Some\Deeply\Nested\Namespace\FooBar;

// this works because FooBar::class is resolved to "Some\\Deeply\\Nested\\Namespace\\FooBar"

$reflection = new ReflectionClass(FooBar::class);

更多示例查看 RFC

函数参数可以跳过(Parameter skipping)

如果你有一个函数接受多个可选参数,目前你没有办法使用中间参数的默认值,新增的default可以做到使用某些参数的默认值, 而不是在调用函数的地方再定义一遍值。

下面是RFC中的一个例子:

function create_query($where, $order_by, $join_type='', $execute = false, $report_errors = true) { ... }

如果我们要设置 $report_errors = false 而不需要设置 $join_type和 $execute参数,我们就可以使用下面代码:

create_query("deleted=0", "name", default, default, false);

类型约束检测

检测类型约束原本是要包含中PHP 5.4中的,但是由于未达成共识,他没有被包含进PHP 5.4。

现在PHP 5.5又开始讨论提议他了。查看 RFC

function foo(int $i) { ... }

foo(1); // $i = 1

foo(1.0); // $i = 1

foo("1"); // $i = 1

foo("1abc"); // not yet clear, maybe $i = 1 with notice

foo(1.5); // not yet clear, maybe $i = 1 with notice

foo([]); // error

foo("abc"); // error

新的Getters和 Setters语法

如果你是 getXYZ()和 setXYZ()写法的粉丝,那么这是一个可喜的变化。PHP 5.5中提议增加一个对于直接属性读写的 语法:

class TimePeriod {

public $seconds;

public $hours {

get { return $this->seconds / 3600; }

set { $this->seconds = $value * 3600; }

}

}

$timePeriod = new TimePeriod;

$timePeriod->hours = 10;

var_dump($timePeriod->seconds); // int(36000)

var_dump($timePeriod->hours); // int(10)

也有一些其他的特性,例如只读的属性,更多内容可以参考 RFC

生成器

目前自定义的迭代器很少被使用,因为使用他太麻烦了,需要很多其他无关的代码(被称为模板代码),生成器提供一个方便 使用迭代器的方法来解决这个问题。

例如,这是一个自定义范围的函数,但他也可以被当迭代器使用:

function *xrange($start, $end, $step = 1) {

for ($i = $start; $i < $end; $i += $step) {

yield $i;

}

}

foreach (xrange(10, 20) as $i) {

// ...

}

上面xrange函数具有同内置的range函数相同的功能,唯一不同的是他返回的不是一个包含了所有值的数组,而是一个迭代器 生成的动态值。

更多的功能可以参考 RFC

列表内涵和生成器表达式

列表内涵提供一个简单的访问数组的方式:

$firstNames = [foreach ($users as $user) yield $user->firstName];

上面类表内涵等同于下面代码:

$firstNames = [];

foreach ($users as $user) {

$firstNames[] = $user->firstName;

}

他也可以过滤数组:

$underageUsers = [foreach ($users as $user) if ($user->age < 18) yield $user];

生成器表达式类是,但他返回的是一个迭代器动态生成的值,而不是一个数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值