【CTF部分基础知识二之PHP(二十三)】

PHP加密技术

PHP加密函数

数据加密的基本原理就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,通过这样的途径来保护数据,防止数据泄露。

使用crypt()函数进行加密

crypt()函数可以完成单向加密功能,语法格式如下:

string crypt(string str, string salt);

其中,str是需要加密的字符串,salt为加密时使用的干扰串。如果没有salt,crypt()会创建弱散列。

使用md5()函数进行加密

md5()函数使用MD5算法。MD5的全称是message-digest algorithm 5(信息-摘要算法),它的作用是把不同长度的数据信息经过一系列的算法转换成一个128位的数值,即把一个任意长度的字节串变换成一个定长的大整数。注意,这里是“字节串”而不是“字符串”,因为这种变换只与字节的值有关,与字符集或编码方式无关。md5()函数的语法格式如下:

string md5(string str [, bool raw_output]);

其中,字符串str为要加密的明文,raw_output如果设为true,则函数返回一个二进制形式的密文,该参数默认为false。

使用sha1()函数进行加密
和MD5类似的还有SHA算法。SHA全称为secure hash algorithm(安全哈希算法),PHP提供的sha1()函数使用的就是SHA算法,其语法格式如下:

string sha1(string str [, bool raw_output])

函数返回一个40位的十六进制数,如果参数raw_output为true,则返回一个20位的二进制数。默认raw_output为false。

注意
sha后面的1是阿拉伯数字1,不是字母l(L),读者一定要注意。

PHP加密扩展库

PHP除了自带的几种加密函数,还有一些功能更全面的加密扩展库,比较常用的有Hash和OpenSSL。其中,Hash扩展库允许使用各种散列算法直接或增量处理任意长度的信息。OpenSSL扩展库使用加密扩展包封装了多个用于加密和解密的函数,极大方便了对数据进行加密和解密的操作。

Hash扩展库

Hash扩展为内置,不再需要外部库,并且默认是启用的。Hash扩展成为PHP的核心扩展,可以直接使用。下面介绍几个Hash扩展库中的常用函数。
(1)hash_algos()函数:用来获取已注册的Hash算法列表,语法格式如下:

array hash_algos()

该函数返回一个数值索引数组,包含了所支持的Hash算法名称。
(2)hash()函数:用来生成哈希值(消息摘要),语法格式如下:

string hash( string algo, string data, bool binary, array options = [] )

OpenSSL扩展库

OpenSSL扩展库用于实现对数据进行对称或非对称的加密或解密操作。

说明
对称加密就是使用同一个key(密钥)对数据进行加密和解密的操作。对称加密常用的算法有AES、DES、3DES、IDEA、RC2、RC5等,比较常用的是AES和DES。

(1)openssl_encrypt()函数:用来加密数据,语法格式如下:

string openssl_encrypt ( string data , string method , string password, int options, string iv )

参数说明如下:
☑ data:要加密的明文。
☑ method:加密算法,可以使用openssl_get_cipher_methods()函数来获取。
☑ password:密钥。
☑ options:指定标记按位或值,它有两个可选常量,OPENSSL_RAW_DATAOPENSSL_ZERO_PADDING。如果设置为OPENSSL_RAW_DATA,加密后的数据将按照原样返回(二进制乱码内容),如果设置为OPENSSL_ZERO_PADDING,加密后的数据将返回为base64之后的内容。
☑ iv:初始化向量。
(2)openssl_decrypt()函数:用来解密数据,语法格式如下:

string openssl_decrypt ( string data , string method , string password, int options, string iv )

该函数的参数和openssl_encrypt()函数的参数基本一致,只是将明文数据换成了密文数据。
(3)openssl_get_cipher_methods()函数:用于获取可用的加密算法,语法格式如下:

array openssl_get_cipher_methods ( bool aliases )

该函数返回一个包含可用加密算法的数组。如果密码别名应该包含在返回的数组中,则将aliases参数设置为true。
(4)openssl_cipher_iv_length()函数:用于获取密码初始化向量的长度,语法格式如下:

int|false openssl_cipher_iv_length (string cipher_algo )

参数cipher_algo用于指定加密算法。如果函数执行成功,则返回密码初始化向量的长度,否则返回false。
(5)openssl_random_pseudo_bytes()函数:用于生成一个伪随机字节串,语法格式如下:

string openssl_random_pseudo_bytes ( int length, bool strong_result )

参数说明如下:
☑ length:生成字节串的长度。
☑ strong_result:在生成随机字节串的过程中是否使用强加密算法。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liana-Fany

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值