php文件加密-PHP有哪些加密算法技术?

2023-08-23 0 7,638 百度已收录

PHP加密方式分为单次哈希加密、对称加密、非对称加密。 常用的MD5、hash、crypt、sha1都是单项哈希加密,单项哈希加密是不可逆的。 比如URL编码和base64编码都是对称加密,是可逆的,也就是说加密和解密使用同一个密钥。 除了非对称加密外,加密和解密的密钥也不相同。 从安全的角度来看,如果还想解密加密的信息,非对称加密无疑是最安全的方法。

MD5加密

md5加密算法是PHP中最常见的加密算法。 该算法不可逆,一般用于对用户密码等信息进行加密,保证用户信息安全。 MD5消息摘要算法:MD5消息摘要算法以任意宽度的信息作为输入值php文件加密,将其转换为128位宽的“指纹信息”或“消息摘要”值来表示输入值,并转换为如下值用作结果。 MD5算法主要是针对数字签名应用而设计的; 在这个数字签名应用中,较大的文件在以安全的方式压缩之前将被加密(这里加密过程是在密码系统[例如:RSA]下通过设置私钥完成的公钥下传递)。举一个反例

<?php
//这里是一个字符
$str = "this is string";
//通过MD5加密函数加密
$res = md5($str);
//在PHP中,MD5()函数还有第二个参数,为bool类型,当为TRUE是返回的加密是16字符原始
//二进制格式字符串,当为FALSE是返回32位的16进制,默认为false,一般都默认
//返回二进制
$res = md5($str,true);
?>

Crypt() 加密算法

crypt()加密算法是一种不可逆加密算法。 它有两个参数,一个是要加密的字符串,另一个是salt值(或者成为干扰字符串)。 如果不指定第二个参数,则会自己随机生成一个干扰串,并且是MD5加密的形式。 另外,该功能在不同操作系统上的表现也不同,需要手动检查。 举个反例。

<?php
//需要加密的字符串
$str = "this is string";
//使用crypt加密,不指定盐值
$res = crypt($str);
//指定盐值,但是盐值只能写两位,如果超过了则只会取前两位,在某些系统中会直接返回FALSE
$res = crypt($str,'jm');

?>

sha1加密算法

sha1加密算法与MD5加密算法相同,且不可逆。 有两个参数,一是要加密的字符串,二是bool值。 如果第二个参数指定为TRUE,则返回二进制补码格式的字符串,如果不指定,默认为FALSE,返回的字符串为40位16补码格式字符串,例如

<?php
//需要加密的字符串
$str = "this is string";
//通过sha1进行加密
$res = sha1($str);
//通过指定第二个参数加密
$res = sha1($str,true);
?>

URL编码加密

对于我们的网站来说,直接暴露给用户的是地址栏传递的参数,它是明文的,所以我们可以使用基本的加密算法来简单加密。 请注意,这种加密方法是可逆的。 也就是说,加密后的密文被揭露后我们是可以看到的,所以如果想实现真正的加密,不推荐这种加密算法。

在 PHP 中,有两个函数 urlencode 和 urldecode 用于揭开 URL 加密的神秘面纱。

http://www.xxxx.com?name=xxxx&amp;phone=112

我们可以加密这个地址

<?php//需要加密的网址$str = "http://www.xxxx.com?name=xxxx&phone=112";//使用urlencode加密$res = urlencode($str);//使用urldecode解密$result = urldecode($res);?>

既然通过这些方法和加密来加密和解密没有太大的区别,那么我们需要他的目的是什么呢? 我们认为我们可以轻松破解这个加密字符串。 虽然这两个函数有特殊的功能,也就是说它们不仅仅用于加密。 其实就是这个话题,因为这个话题主要是加密的,至于Expansion还是要说的。

<?php
//为了解决这个问题我们就可以对这部分字符编码
$str = "http://xxxx.com?name=".urlencode('xxxx&123');
//这样我们传过来的值就变成了name = xxxx&123
?>

Base64编码加密

请注意,虽然本节的加密算法中提到了base64,而且它并不是主要用于加密,而且从大多数程序来看,几乎没有人会用它作为加密方式来加密数据,所以它的作用是主要是用来做什么的? 这是关于base64加密机制的。

Base64 加密本质上是将数据转换为 ASCLL 代码。 比如一张图片的base64编码,会得到一堆用Ascll码连接的字符串,这样会更有利于文件传输。 其实base64的作用就是在文件的传输上。 。 例如,当移动客户端将文件上传到服务器时,可以使用base64编码轻松传输文件。

base64加密函数

base64_encode($data);

Base64揭秘函数

base64_decode($data);

哈希加密

哈希加密也是不可逆的,由于给出一个不确定的字符串,返回特定宽度的字符串,这本质上实现了单项哈希加密。如何使用

hash($ago,$data);

密码哈希 API 加密

PasswordHashingAPI是PHP5.5之后的新特性。 它主要提供以下功能供我们使用:

password_hash() – 对密码加密.password_verify() – 验证已经加密的密码,检验其hash字串是否一致.password_needs_rehash() – 给密码重新加密.password_get_info() – 返回加密算法的名称和一些相关信息.

其实crypt()函数就够用了,而password_hash()不仅可以让我们的代码更加简洁,而且在安全性方面也给了我们更好的保护,所以现在PHP官方推荐这些方法来加密用户的密码,许多流行的框架(例如 Laravel)都使用这些加密方法。

$hash = password_hash($passwod, PASSWORD_DEFAULT);

是的,就是这么简单,一行代码,Alldone。

PASSWORD_DEFAULT目前使用的是Bcrypt,所以我会在里面推荐这个,但是因为PasswordHashingAPI做得更好,所以我必须真诚地向大家推荐PasswordHashingAPI。 这里需要注意的是,如果你的代码使用PASSWORD_DEFAULT加密方式,那么在数据库表中,密码数组必须设置为60个字符以上的宽度。 您还可以使用 PASSWORD_BCRYPT。 此时,加密后的字符串始终为60个字符宽。

这里可以使用password_hash(),无需提供盐值(salt)和消费值(cost)。 你可以将前者理解为性能消耗值。 成本越大,加密算法就越复杂,消耗的显存也就越多。 大的。 事实上,如果需要指定对应的salt值和消耗值,可以这样写:

$options = ['salt' => custom_function_for_salt(), //write your own code to generate a suitable salt'cost' => 12 // the default cost is 10 ];$hash = password_hash($password, PASSWORD_DEFAULT, $options);

密码加密后,我们需要对密码进行验证,以确定用户输入的密码是否正确:

if (password_verify($password, $hash)) {// Pass }else {// Invalid}

很简单php文件加密,直接使用password_verify来验证我们之前加密的字符串(存储在数据库中)即可。

但是,如果我们有时候需要修改我们的加密方式,比如我们突然想改变salt值或者增加3倍的消耗值,这时候我们就会用到password_needs_rehash()函数:

if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {// cost change to 12 $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);// don't forget to store the new hash!}

只有这样PHP的PasswordHashingAPI才能知道我们又改变了加密方式,而这样做的主要目的就是验证旁边的密码。

看完本文有收获?点赞、分享是最大的支持!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php文件加密-PHP有哪些加密算法技术? https://www.wkzy.net/game/144333.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务