您现在的位置是:首页 > 黑客技术

PHP 5.5新的数据加密函数

作者:果E安全网时间:2020-10-26 00:00:51分类:黑客技术

简介PHP5.4不久公布4个月,如今来讨论下一个版本号的PHP,很有可能为时过早,可是在PHP的內部邮件归档中,这一话题讨论如今挺火。PHP5.5现阶段还处在初期发展趋势环节,最后他会成什么样子,如今没有人会了解,下边仅仅汇总大家对PHP5.5的期待,可是PHP5.5并不会包括下边全部的內容。简易的而言,有4个较为关键的作用点:一个简易的密码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函数可能主要表现以下:

<?php

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

// 相当于下边代码

$userNames=[];

foreach ($users as $user){

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

}

一个简易的密码hash函数

近期许多 商业网站泄漏密码(留意这一的泄漏密码并不是中国的各种各样密码门,外国人才不关注中国呢,国外也 有很多类是中国的密码泄漏恶性事件),针对密码大家一直倡导应用bcrypt开展数据加密,但還是有很多人应用不 安全性的sha1hach。(中国、外的密码泄漏,尽管全是泄漏,但海外泄漏是被hach过的密码,而中国立即是 密文)

我可能这可能是应用crypt函数太艰难的(sha1, md5确实非常简单),由于大家必须一个简易并且安全性的密码 hach函数:

<?php

$password="foo";

// 建立一个密码hach

$hash=password_hash($password, PASSWORD_BCRYPT);

// 认证一个密码

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

// 密码恰当!

}else{

// 密码不正确!

}

新的密码hach有大量的更能,这儿是 RFC 简述。

变量定义引入 (Constant dereferencing)

“Constant dereferencing” 就是指能够立即用实际操作数组的方法来实际操作字符串数组,看下面两个事例:

<?php

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中提升了类名的特性。就造成 下边代码的难题:

<?php

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中建议提升一个针对立即属性读写能力的 英语的语法:

<?php

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

制作器

现阶段自定的迭代器非常少被应用,由于应用他太麻烦了,必须许多 别的不相干的代码(被称作模版代码),制作器出示一个便捷 应用迭代器的方式来处理这个问题。

比如,这是一个自定范畴的函数,但他还可以被当迭代器应用:

<?php

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

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

yield $i;

}

}

foreach (x range(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];

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

  via:http://www.zzphp.net/?p=139

郑重声明:

果E安全网所有活动均为互联网所得,如有侵权请联系本站删除处理,转载请注明本站地址。

我来说两句