PHP非对称与对称双向加密解密的方式

 更新时间:2023年10月19日 09:36:11   作者:bug丶小狼人  
RSA非对称加密解密算法是一种广泛应用于信息安全领域的加密算法,AES、DES、3DES都是对称加密算法,也就是说加密和解密使用的是同一个密钥,本文给大家介绍了PHP非对称与对称双向加密解密的方式,需要的朋友可以参考下

RSA非对称加密解密:

什么是RSA非对称加密解密解析:

解析:

RSA非对称加密解密算法是一种广泛应用于信息安全领域的加密算法。它不同于常规的对称加密,如相同的密钥用于加密和解密,而是使用一对不同的密钥,即公钥和私钥,进行加密和解密的过程。

在RSA加密算法中,甲方首先生成一对密钥,并将其中的一个作为公钥公开给其他方;得到公钥的乙方则使用该公钥对机密信息进行加密后发送给甲方;最后,甲方用自己的另一个专用密钥,即私钥,对接收到的加密信息进行解密。

值得一提的是,RSA加密算法的加密原理基于一个非常简单但有深远影响的数论事实:两个大质数相乘易事,但一个大数分解为两个质数的乘积却困难重重。这就使得RSA算法具有极高的安全性,极其难以被破解。

然而,虽然RSA算法的安全性极高,但其实施过程中可能会面临一些问题,例如密钥配送问题。这是因为在确定下来的密钥如何让双方都知道的过程中,密钥本身也是信息,其传输过程也可能被拦截和窃取。因此,解决密钥配送问题对于确保RSA算法的安全性至关重要。

为什么使用:

RSA非对称加密解密算法在信息安全领域得到广泛应用,其最主要的优点在于安全性极高。与常规的对称加密不同,如相同的密钥用于加密和解密,RSA算法使用的是一对不同的密钥,即公钥和私钥,进行加密和解密的过程。公钥是公开的,私钥是自己保存的,无需将私钥给别人。

然而,RSA算法也存在一些缺点。首要的一点就是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。此外,RSA算法的加密长度为2048位,因此对于服务端的消耗是比较大的,所以计算的速度也会比较慢,效率相对较低。

总的来说,虽然RSA算法的安全性和兼容性都很强,但是由于其加密解密效率较低,所以在实际应用中通常结合其他加密方法一起使用,例如:针对C/S模型,服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。客户端请求服务端时,拿到服务端的公钥pub。客户端通过AES计算出一个对称加密的秘钥X。然后使用pub将X进行加密。客户端将加密后的密文发送给服务端。

有什么优点:

1.RSA非对称加密解密算法的优点主要体现在其高度的安全性上。首先,该算法的运作原理基于一个深奥的数论事实:将两个大素数相乘很容易,但反之却极其困难。因此,只要这两个素数的秘密被妥善保管,用它们加密的信息就能得到有效保护。

2.RSA算法的一个显著特点是它使用两把不同的密钥,公钥和私钥。公钥可以公开,而私钥则需要保密保存,无需将其提供给他人。这一特性使得RSA在许多场合变得非常有用,特别是在需要通过网络传输密钥的情况下。由于不需要在网络中传输密钥,因此可以避免密钥在传输过程中被窃取或篡改的风险。

3.尽管RSA算法具有很高的安全性,但它也存在一些缺点。比如,RSA算法的加解密过程可能会花费较长的时间,因此它更适合对少量数据进行加密。此外,RSA算法的效率相对较低,因此在处理大量数据时可能不太适用。为了解决这个问题,实际应用中常常会结合其他加密方式,如AES等进行混合使用。例如在C/S模型中,服务端计算出一对秘钥pub/pri,将私钥保密,将公钥公开。客户端请求服务端时,拿到服务端的公钥pub,通过AES计算出一个对称加密的秘钥X,然后使用pub将X进行加密,最后将加密后的密文发送给服务端。

DEMO:

<?php
// 生成密钥对
$keyPair = openssl_pkey_new(array(
    "private_key_bits" => 2048,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
));
 
// 获取私钥和公钥
openssl_pkey_export($keyPair, $privateKey);
$publicKey = openssl_pkey_get_details($keyPair)["key"];
 
// 要加密的数据
$data = "Hello, World!";
 
// 使用公钥进行加密
$encryptedData = '';
openssl_public_encrypt($data, $encryptedData, $publicKey, OPENSSL_PKCS1_OAEP_PADDING);
echo "Encrypted data: " . base64_encode($encryptedData) . PHP_EOL;
 
// 使用私钥进行解密
$decryptedData = '';
openssl_private_decrypt($encryptedData, $decryptedData, $privateKey, OPENSSL_PKCS1_OAEP_PADDING);
echo "Decrypted data: " . $decryptedData . PHP_EOL;
?>

在这个示例中,我们首先生成了一个RSA密钥对,然后使用公钥对数据进行了加密,最后使用私钥对数据进行了解密。注意,由于RSA算法的特性,加密和解密的过程可能会花费一些时间。

AES、DES、3DES等对称加密解密:

解析:

AES、DES、3DES都是对称加密算法,也就是说加密和解密使用的是同一个密钥。

DES(Data Encryption Standard)是一种使用密钥进行加密的块算法,出自IBM的研究,后来被美国政府正式采用并开始广泛流传。然而,现在普遍认为DES由于其56位密钥长度较短,安全性不足,已经可以在短时间内被破解,因此现在使用越来越少。

3DES(Triple DES),也称TDES,是DES的加强版本,为了解决DES安全性不足的问题而出现。它使用3条56位的密钥对数据进行三次加密,使得即使攻击者拥有大量的计算资源,也难以破解。

AES(Advanced Encryption Standard)则是目前最流行的对称加密算法之一,它的密钥长度比DES更长,因此更安全。AES算法的出现正是为了取代DES。

在对称加密中,发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。

为什么使用:

对称加密算法,如AES、DES和3DES等,被广泛使用是因为它们提供了一种高效且可靠的方法来保护数据的机密性。这些算法通过使用相同的密钥进行加密和解密操作,使得加解密过程变得相对简单快速。

然而,这些算法的安全性各不相同。例如,DES是一种早期的对称加密算法,其密钥长度为56位,虽然加密速度较快,但由于其安全性较低,易受到暴力破解和差分攻击等攻击手段的攻击,因此现在使用越来越少。 为了提高安全性,出现了3DES,也称Triple DES,这是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密,从而大大提高了加密的强度。

再进一步,AES(高级加密标准)是目前最流行的对称加密算法之一,它的密钥长度为128位或256位,安全性比DES和3DES更高。 AES算法的出现正是为了取代安全性较低的DES。 因此,在需要高度安全的场合,通常会选择使用AES等高安全性的对称加密算法来保护数据的机密性。

有什么优点:

  • 加密速度快:相对于非对称加密算法,对称加密算法由于只需要一个密钥进行加解密操作,所以其加密速度通常更快,适合加密大文件。

  • 安全性较高:虽然早期的DES算法由于密钥长度较短,易受到暴力破解和差分攻击等攻击手段的攻击,但是通过将其发展为3DES(Triple DES),也就是使用3条56位的密钥对数据进行三次加密,安全性得到了极大的提高。而目前最流行的AES(高级加密标准)的密钥长度为128位或256位,安全性更高。

  • 可逆性:对称加密算法的另一个特点是密文可逆,即可以通过同一个密钥进行解密操作,从而获取原始明文。

DEMO:

<?php
// 定义密钥和明文
$key = '0123456789abcdef'; // 密钥长度为16字节(128位)
$plaintext = 'Hello, world!'; // 明文
 
// 创建加密器对象,并指定加密模式为ECB模式
$cipher = "aes-128-ecb";
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
echo "密文:".bin2hex($ciphertext)."\n";
 
// 创建解密器对象,并指定加密模式为ECB模式
$decipher = "aes-128-ecb";
$decrypted_text = openssl_decrypt($ciphertext, $decipher, $key, OPENSSL_RAW_DATA, $iv);
echo "解密后的明文:".$decrypted_text."\n";
?>

在这个示例中,我们首先定义了一个密钥和一个明文,然后使用AES算法对其进行了加密和解密操作.

以上就是PHP非对称与对称双向加密解密的方式的详细内容,更多关于PHP非对称与对称加解密的资料请关注脚本之家其它相关文章!

相关文章

  • PHP实现获取客户端IP并获取IP信息

    PHP实现获取客户端IP并获取IP信息

    这篇文章主要介绍了PHP实现获取客户端IP并获取IP信息的方法示例,非常实用,有需要的小伙伴快来参考下吧。
    2015-03-03
  • 关于PHP5和PHP7中数组实现方式的比较总结

    关于PHP5和PHP7中数组实现方式的比较总结

    PHP7比PHP5性能提升了两倍,全面一致的64位支持,以前的许多致命错误,现在改成抛出异常,下面这篇文章主要给大家介绍了关于PHP5和PHP7中数组实现方式比较的相关资料,需要的朋友可以参考下
    2021-09-09
  • php eval函数一句话木马代码

    php eval函数一句话木马代码

    这个是php常见的一句话木马的源码,通过post木马程序来实现木马的植入,eval()函数把字符串按照PHP代码来计算。该字符串必须是合法的PHP代码,且必须以分号结尾。如果没有在代码字符串中调用return语句,则返回NULL。如果代码中存在解析错误,则eval()函数返回false。
    2015-05-05
  • PHP中localeconv()函数的用法

    PHP中localeconv()函数的用法

    今天小编就为大家分享一篇关于PHP中localeconv()函数的用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • PHP中如何使用Redis接管文件存储Session详解

    PHP中如何使用Redis接管文件存储Session详解

    这篇文章主要给大家介绍了关于在PHP中如何使用Redis接管文件存储Session的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • array_values()在php中返回数组的操作实例

    array_values()在php中返回数组的操作实例

    在本篇文章里小编给大家分享的是一篇关于array_values()在php中返回数组的操作实例内容,有兴趣的朋友们可以学习参考下。
    2021-02-02
  • 基于php常用函数总结(数组,字符串,时间,文件操作)

    基于php常用函数总结(数组,字符串,时间,文件操作)

    本篇文章是对php常用函数(数组,字符串,时间,文件操作)进行了详细的总结介绍,需要的朋友参考下
    2013-06-06
  • php接口与接口引用的深入解析

    php接口与接口引用的深入解析

    以下是对php中的接口与接口引用进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • Ajax实现对静态页面的文章访问统计功能示例

    Ajax实现对静态页面的文章访问统计功能示例

    这篇文章主要介绍了Ajax实现对静态页面的文章访问统计功能,结合简单实例形式分析了静态页面实现访问统计功能的计数操作相关技巧,需要的朋友可以参考下
    2016-10-10
  • PHP-FPM 设置多pool及配置文件重写操作示例

    PHP-FPM 设置多pool及配置文件重写操作示例

    这篇文章主要介绍了PHP-FPM 设置多pool及配置文件重写操作,涉及PHP使用PHP-FPM实现进程管理的相关操作技巧,需要的朋友可以参考下
    2019-10-10

最新评论