免费php加密(php一共有几种加密方式)

2024-02-07 22:20:02 :54

免费php加密(php一共有几种加密方式)

大家好,关于免费php加密很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于php一共有几种加密方式的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

php一共有几种加密方式

一共有5种加密方式如下: 1.MD5加密:将任意长度的信息作为输入值,并将其换算成一个 128 位长度的"指纹信息"或"报文摘要"值来代表这个输入值,并以换算后的值作为结果加密。 2.Crype加密:增加由使用特定加密方法的特定字符串所生成的字符串数量加密。 3.Sha1加密: 产生一个名为报文摘要的 160 位的输出,报文摘要可以被输入到一个可生成或验证报文签名的签名加密。4.url加密:使用urlencode函数对数据进行编码加密。 5.base64加密:使用base64_decode方法对数据进行编码加密。

php excel加密的实现方法有什么

PHP中的加密方式有如下几种1. MD5加密string md5 ( string $str )参数str -- 原始字符串。raw_output -- 如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。这是一种不可逆加密,执行如下的代码$password = ‘123456‘;echo md5($password);得到结果是e10adc3949ba59abbe56e057f20f883e2. Crype加密string crypt ( string $str )crypt() 返回一个基于标准 UNIX DES 算法或系统上其他可用的替代算法的散列字符串。参数str -- 待散列的字符串。salt -- 可选的盐值字符串。如果没有提供,算法行为将由不同的算法实现决定,并可能导致不可预料的结束。这是也一种不可逆加密,执行如下的代码代码如下:$password = ‘123456‘;$salt = "test";// 只取前两个echo crypt($password, $salt);得到的结果是teMGKvBPcptKo使用自动盐值的例子如下:代码如下:$password = crypt(‘mypassword‘); // 自动生成盐值/* 你应当使用 crypt() 得到的完整结果作为盐值进行密码校验,以此来避免使用不同散列算法导致的问题。(如上所述,基于标准 DES 算法的密码散列使用 2 字符盐值,但是基于 MD5 算法的散列使用 12 个字符盐值。)*/if (crypt(‘mypassword‘, $password) == $password) {echo "Password verified!";}执行结果是输出 Password verified!以不同散列类型使用 crypt()的例子如下:代码如下:if (CRYPT_STD_DES == 1) {echo ‘Standard DES: ‘ . crypt(‘rasmuslerdorf‘, ‘rl‘) . "\n";}if (CRYPT_EXT_DES == 1) {echo ‘Extended DES: ‘ . crypt(‘rasmuslerdorf‘, ‘_J9..rasm‘) . "\n";}if (CRYPT_MD5 == 1) {echo ‘MD5: ‘ . crypt(‘rasmuslerdorf‘, ‘$1$rasmusle$‘) . "\n";}if (CRYPT_BLOWFISH == 1) {echo ‘Blowfish: ‘ . crypt(‘rasmuslerdorf‘, ‘$2a$07$usesomesillystringforsalt$‘) . "\n";}if (CRYPT_SHA256 == 1) {echo ‘SHA-256: ‘ . crypt(‘rasmuslerdorf‘, ‘$5$rounds=5000$usesomesillystringforsalt$‘) . "\n";}if (CRYPT_SHA512 == 1) {echo ‘SHA-512: ‘ . crypt(‘rasmuslerdorf‘, ‘$6$rounds=5000$usesomesillystringforsalt$‘) . "\n";}其结果如下Standard DES: rl.3StKT.4T8MExtended DES: _J9..rasmBYk8r9AiWNcMD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hiSHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21在 crypt() 函数支持多重散列的系统上,下面的常量根据相应的类型是否可用被设置为 0 或 1:CRYPT_STD_DES - 基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。在盐值中使用非法的字符将导致 crypt() 失败。CRYPT_EXT_DES - 扩展的基于 DES 算法的散列。其盐值为 9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的优先。0 到 63 被编码为 "./0-9A-Za-z"。在盐值中使用非法的字符将导致 crypt() 失败。CRYPT_MD5 - MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。CRYPT_BLOWFISH - Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。CRYPT_SHA256 - SHA-256 算法使用一个以 $5$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。CRYPT_SHA512 - SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。3. Sha1加密string sha1 ( string $str )参数str -- 输入字符串。raw_output -- 如果可选的 raw_output 参数被设置为 TRUE,那么 sha1 摘要将以 20 字符长度的原始格式返回,否则返回值是一个 40 字符长度的十六进制数字。这是也一种不可逆加密,执行如下代码:$password = ‘123456‘;echo sha1($password);得到的结果是7c4a8d09ca3762af61e59520943dc26494f8941b以上几种虽然是不可逆加密,但是也可以根据查字典的方式去解密。如下的地址中就提供了可以将上面的加密结果解密出来的功能。***隐藏网址***那大家是不是加了就算加了密,也没用啊,其实不然,只要你的加密足够复杂,被破解出的可能性就越小,比如用以上三种加密方式混合加密,之后我会推荐给大家一个php的加密库。4. URL加密string urlencode ( string $str )此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码不同。string urldecode ( string $str )解码给出的已编码字符串中的任何 %##。 加号(‘+‘)被解码成一个空格字符。这是一种可逆加密,urlencode方法用于加密,urldecode方法用于解密,执行如下代码:***隐藏网址***$encodeUrl = urlencode($url);echo $encodeUrl . "\n";// 如果是在网页上展示的,就将\n修改为echo urldecode($encodeUrl);得到的结果如下***隐藏网址******隐藏网址***基于RFC 3986的加密URL的方法如下:代码如下:function myUrlEncode($string) {$entities = array(‘%21‘, ‘%2A‘, ‘%27‘, ‘%28‘, ‘%29‘, ‘%3B‘, ‘%3A‘, ‘%40‘, ‘%26‘, ‘%3D‘, ‘%2B‘, ‘%24‘, ‘%2C‘, ‘%2F‘, ‘%3F‘, ‘%25‘, ‘%23‘, ‘%5B‘, ‘%5D‘);$replacements = array(‘!‘, ‘*‘, "‘", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "");return str_replace($entities, $replacements, urlencode($string));}5. Base64信息编码加密string base64_encode ( string $data )使用 base64 对 data 进行编码。设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。Base64-encoded 数据要比原始数据多占用 33% 左右的空间。string base64_decode ( string $data )对 base64 编码的 data 进行解码。参数data -- 编码过的数据。strict -- 如果输入的数据超出了 base64 字母表,则返回 FALSE。执行如下代码:代码如下:$name = ‘CraryPrimitiveMan‘;$encodeName = base64_encode($name);echo $encodeName . "\n";echo base64_decode($encodeName);其结果如下代码如下:Q3JhcnlQcmltaXRpdmVNYW4=CraryPrimitiveMan推荐phpass经 phpass 0.3 测试,在存入数据库之前进行哈希保护用户密码的标准方式。 许多常用的哈希算法如 md5,甚至是 sha1 对于密码存储都是不安全的, 因为骇客能够使用那些算法轻而易举地破解密码。对密码进行哈希最安全的方法是使用 bcrypt 算法。开源的 phpass 库以一个易于使用的类来提供该功能。代码如下:《?php// Include phpass 库require_once(‘phpass-03/PasswordHash.php‘)// 初始化散列器为不可移植(这样更安全)$hasher = new PasswordHash(8, false);// 计算密码的哈希值。$hashedPassword 是一个长度为 60 个字符的字符串.$hashedPassword = $hasher-》HashPassword(‘my super cool password‘);// 你现在可以安全地将 $hashedPassword 保存到数据库中!// 通过比较用户输入内容(产生的哈希值)和我们之前计算出的哈希值,来判断用户是否输入了正确的密码$hasher-》CheckPassword(‘the wrong password‘, $hashedPassword); // false$hasher-》CheckPassword(‘my super cool password‘, $hashedPassword); // true?》

PHP对称加密-AES

对称加解密算法中,当前最为安全的是 AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于 AES 加密算法的函数簇: Mcrypt OpenSSL

其中 Mcrypt 在 PHP 7.1.0 中被弃用(The Function Mycrypt is Deprecated),在 PHP 7.2.0 中被移除,所以即可起你应该使用 OpenSSL 来实现 AES 的数据加解密。

在一些场景下,我们不能保证两套通信系统都使用了相函数簇去实现加密算法,可能 siteA 使用了最新的 OpenSSL 来实现了 AES 加密,但作为第三方服务的 siteB 可能仍在使用 Mcrypt 算法,这就要求我们必须清楚 Mcrypt 同 OpenSSL 之间的差异,以便保证数据加解密的一致性。

下文中我们将分别使用 Mcrypt 和 OpenSSL 来实现 AES-128/192/256-CBC 加解密,二者同步加解密的要点为:

协同好以上两点,就可以让 Mcrypt 和 OpenSSL 之间一致性的对数据进行加解密。

AES 是当前最为常用的安全对称加密算法,关于对称加密这里就不在阐述了。

AES 有三种算法,主要是对数据块的大小存在区别:

AES-128:需要提供 16 位的密钥 key AES-192:需要提供 24 位的密钥 key AES-256:需要提供 32 位的密钥 key

AES 是按数据块大小(128/192/256)对待加密内容进行分块处理的,会经常出现最后一段数据长度不足的场景,这时就需要填充数据长度到加密算法对应的数据块大小。

主要的填充算法有填充 NUL("0") 和 PKCS7,Mcrypt 默认使用的 NUL("0") 填充算法,当前已不被推荐,OpenSSL 则默认模式使用 PKCS7 对数据进行填充并对加密后的数据进行了 base64encode 编码,所以建议开发中使用 PKCS7 对待加密数据进行填充,已保证通用性(alipay sdk 中虽然使用了 Mcrypt 加密簇,但使用 PKCS7 算法对数据进行了填充,这样在一定程度上亲和了 OpenSSL 加密算法)。

Mcrypt 的默认填充算法。NUL 即为 Ascii 表的编号为 0 的元素,即空元素,转移字符是 "\0",PHP 的 pack 打包函数在 ’a’ 模式下就是以 NUL 字符对内容进行填充的,当然,使用 "\0" 手动拼接也是可以的。

OpenSSL的默认填充算法。下面我们给出 PKCS7 填充算法 PHP 的实现:

默认使用 NUL("\0") 自动对待加密数据进行填充以对齐加密算法数据块长度。

获取 mcrypt 支持的算法,这里我们只关注 AES 算法。

注意:mcrypt 虽然支持 AES 三种算法,但除 MCRYPT_RIJNDAEL_128 外, MCRYPT_RIJNDAEL_192/256 并未遵循 AES-192/256 标准进行加解密的算法,即如果你同其他系统通信(java/.net),使用 MCRYPT_RIJNDAEL_192/256 可能无法被其他严格按照 AES-192/256 标准的系统正确的数据解密。官方文档页面中也有人在 User Contributed Notes 中提及。这里给出如何使用 mcrpyt 做标注的 AES-128/192/256 加解密

即算法统一使用 MCRYPT_RIJNDAEL_128 ,并通过 key 的位数 来选定是以何种 AES 标准做的加密,iv 是建议添加且建议固定为16位(OpenSSL的 AES加密 iv 始终为 16 位,便于统一对齐),mode 选用的 CBC 模式。

mcrypt 在对数据进行加密处理时,如果发现数据长度与使用的加密算法的数据块长度未对齐,则会自动使用 "\0" 对待加密数据进行填充,但 "\0" 填充模式已不再被推荐,为了与其他系统有更好的兼容性,建议大家手动对数据进行 PKCS7 填充。

openssl 簇加密方法更为简单明确,mcrypt 还要将加密算法分为 cipher + mode 去指定,openssl 则只需要直接指定 method 为 AES-128-CBC,AES-192-CBC,AES-256-CBC 即可。且提供了三种数据处理模式,即 默认模式 0 / OPENSSL_RAW_DATA / OPENSSL_ZERO_PADDING 。

openssl 默认的数据填充方式是 PKCS7,为兼容 mcrpty 也提供处理 "0" 填充的数据的模式,具体为下:

options 参数即为重要,它是兼容 mcrpty 算法的关键:

options = 0 : 默认模式,自动对明文进行 pkcs7 padding,且数据做 base64 编码处理。 options = 1 : OPENSSL_RAW_DATA,自动对明文进行 pkcs7 padding, 且数据未经 base64 编码处理。 options = 2 : OPENSSL_ZERO_PADDING,要求待加密的数据长度已按 "0" 填充与加密算法数据块长度对齐,即同 mcrpty 默认填充的方式一致,且对数据做 base64 编码处理。注意,此模式下 openssl 要求待加密数据已按 "0" 填充好,其并不会自动帮你填充数据,如果未填充对齐,则会报错。

故可以得出 mcrpty簇 与 openssl簇 的兼容条件如下:

建议将源码复制到本地运行,根据运行结果更好理解。

1.二者使用的何种填充算法。

2.二者对数据是否有 base64 编码要求。

3.mcrypt 需固定使用 MCRYPT_RIJNDAEL_128,并通过调整 key 的长度 16, 24,32 来实现 ase-128/192/256 加密算法。

关于免费php加密,php一共有几种加密方式的介绍到此结束,希望对大家有所帮助。

免费php加密(php一共有几种加密方式)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.