时间:2022-04-30 17:01:38来源:网络整理
/*
加密算法一般分为两种:对称加密算法和非对称加密算法。
对称加密
对称加密算法是消息的发送者和接收者使用相同的密钥,发送者使用该密钥对文件进行加密,
接收者使用相同的密钥解密以获得信息。常见的对称加密算法有:des/aes/3des。
对称加密算法的特点是:速度快,加密前后文件大小变化不大,但密钥存储是个大问题
,由于消息发送方或接收方的密钥丢失,信息传输将变得不安全。
非对称加密
对称加密的反面是非对称加密。非对称加密的核心思想是使用一对相对密钥
分为公钥和私钥。私钥本身是安全的,而公钥是公开的。公钥和私钥是一对。如果公钥用于加密数据,
只用对应的私钥解密;如果数据是用私钥加密的,那么只有对应的公钥才能用来解密数据,只需要用接收方的公钥加密后发送数据。
常见的非对称加密算法有RSA/DSA:非对称加密虽然没有密钥存储的问题,但计算量大,加密速度很慢。有时我们还需要对大块的数据进行分块加密。
数字签名
为了保证数据的完整性,还需要通过哈希函数计算出一个哈希值,称为数字签名。它的特点是:
无论原始数据有多大,结果的长度都是一样的;
输入相同,输出相同;
对输入的小改动可以产生很大的不同;
加密过程不可逆,无法通过哈希值获取原始数据;
常见的数字签名算法有md5、hash1等算法。
PHP 的 openssl 扩展
openssl扩展使用openssl加密扩展包,封装了多个加解密相关的PHP函数,极大的方便了数据的加解密。常用的函数有:
对称加密相关:
string openssl_encrypt (string $data, string $method, string $password)
其中$data是要加密的数据,$method是要用于加密的方法,$password是要使用的密钥,函数返回加密后的数据;
$methods列表可以使用openssl_get_cipher_methods()获取
解密函数为string openssl_encrypt(string $data, string $method, string $password)
非对称加密相关:
他们都只需要传入一个证书文件(通常是.pem文件);
使用公钥加密数据,其中$data是要加密的数据; $crypted 是一个引用变量aes算法原理,加密后的数据会放到这个变量中; $key 是要传入的公钥数据;
p>
因为加密数据分组的时候,可能不是加密位数的整数倍,所以需要$padding(填充),
$padding 的选项有 OPENSSL_PKCS1_PADDING、OPENSSL_NO_PADDING,分别是 PKCS1 的 padding,或者没有 padding;
签名函数:$data是要签名的数据; $signature 是签名结果的引用变量; $priv_key_id 是用于签名的私钥; $signature_alg 是用于签名的算法
aes算法原理,其算法列表可以通过openssl_get_md_methods()获取
签名验证函数:相对于签名函数,只是需要传入私钥对应的公钥;结果为签名验证结果,1表示成功,0表示失败,-1表示错误;
* */
/*
* 基于百度云 API 的示例
* 所有密码均采用AES 128位加密算法加密,SK的前16位作为密钥。
* 加密后生成的二进制字节流需要转换成十六进制,以字符串的形式发送给服务器
* */
函数 aes128WithFirst16Char($adminPass, $secretAccessKey)
{
$adminPass = pkcs5Pad($adminPass);
//将键值截断为16位
$secretAccessKey = substr($secretAccessKey, 0, 16);
//用AES加密
$crypted = openssl_encrypt($adminPass, 'AES-128-ECB', $secretAccessKey, OPENSSL_RAW_DATA);
//将字符串转换为十六进制
return bin2hex(substr($crypted, 0, 16));
}
//把密码填到16位
函数 pkcs5Pad($adminPass)
{
$pad = 16 - (strlen($adminPass) % 16);
返回 $adminPass 。 str_repeat(chr($pad), $pad);
}
echo aes128WithFirst16Char('加密密码','密钥值');
声明:文章仅代表原作者观点,不代表本站立场;如有侵权、违规,可直接反馈本站,我们将会作修改或删除处理。
图文推荐
2022-04-30 16:58:03
2022-04-30 15:58:03
2022-04-30 13:58:03
2022-04-30 12:58:04
2022-04-30 11:58:03
2022-04-30 11:00:55
热点排行
精彩文章
2022-04-30 16:58:06
2022-04-30 15:58:08
2022-04-30 14:58:51
2022-04-30 13:58:07
2022-04-30 12:58:08
2022-04-30 11:58:06
热门推荐