php实现的三个常用加密解密功能函数示例

yizhihongxing

下面是该攻略的详细内容。

步骤1:了解加密解密方式

在实现加密解密功能之前,首先需要了解一些常用的加密解密方式。以下是几种常见的加密解密方式:

  1. 对称加密(Symmetric-Key Encryption):使用相同的密钥进行加密和解密,常见的算法有AES、DES等。

  2. 非对称加密(Asymmetric-Key Encryption):使用不同的密钥进行加密和解密,常见的算法有RSA、DSA等。

  3. 哈希加密(Hash Encryption):将明文通过哈希算法转换为固定长度的密文,一般不可逆,常见的算法有MD5、SHA等。

了解这些加密解密方式之后,就可以着手实现具体函数了。

步骤2:实现三个常用加密解密功能函数

实现一:对称加密解密函数

对称加密是使用相同的密钥进行加密和解密,因此需要实现一个加密函数和一个解密函数,同时需要指定密钥和加密算法。以下是一个示例代码:

/**
 * 对称加密函数
 * @param string $data 要加密的明文
 * @param string $key 加密密钥
 * @param string $method 加密算法
 * @return string 加密后的密文
 */
function encrypt($data, $key, $method = 'AES-128-CBC') {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
    $encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $encrypted);
}

/**
 * 对称解密函数
 * @param string $data 要解密的密文
 * @param string $key 解密密钥
 * @param string $method 解密算法
 * @return string 解密后的明文
 */
function decrypt($data, $key, $method = 'AES-128-CBC') {
    $data = base64_decode($data);
    $iv_len = openssl_cipher_iv_length($method);
    $iv = substr($data, 0, $iv_len);
    $encrypted = substr($data, $iv_len);
    return openssl_decrypt($encrypted, $method, $key, OPENSSL_RAW_DATA, $iv);
}

以上函数使用openssl库实现,可以指定加密算法、密钥和明文,加密后的结果使用base64编码便于传输和保存。解密过程类似,将密文进行base64解码,然后使用相同的密钥和算法进行解密,得到原始明文。

实现二:非对称加密解密函数

非对称加密需要使用一对密钥进行加密和解密,因此需要实现成对的加密函数和解密函数,同时需要生成一对密钥。以下是一个示例代码:

/**
 * 生成公钥和私钥
 * @return array 公钥和私钥
 */
function generate_keys() {
    $config = array(
        "digest_alg" => "sha512",
        "private_key_bits" => 2048,
        "private_key_type" => OPENSSL_KEYTYPE_RSA,
    );
    $resource = openssl_pkey_new($config);
    openssl_pkey_export($resource, $priv_key);
    $pub_key = openssl_pkey_get_details($resource);
    $pub_key = $pub_key["key"];
    return array('private' => $priv_key, 'public' => $pub_key);
}

/**
 * 非对称加密函数
 * @param string $data 要加密的明文
 * @param string $key 加密密钥
 * @return string 加密后的密文
 */
function encrypt($data, $key) {
    $encrypted = '';
    openssl_public_encrypt($data, $encrypted, $key);
    return base64_encode($encrypted);
}

/**
 * 非对称解密函数
 * @param string $data 要解密的密文
 * @param string $key 解密密钥
 * @return string 解密后的明文
 */
function decrypt($data, $key) {
    $decrypted = '';
    $data = base64_decode($data);
    openssl_private_decrypt($data, $decrypted, $key);
    return $decrypted;
}

以上代码使用openssl库生成一对公钥和私钥,加密过程使用公钥加密,解密过程使用私钥解密,加密后的结果使用base64编码便于传输和保存。

实现三:哈希加密函数

哈希加密是将明文通过哈希算法转换为固定长度的密文,一般不可逆,常见的算法有MD5、SHA等。以下是一个示例代码:

/**
 * MD5哈希加密函数
 * @param string $data 要加密的明文
 * @return string 加密后的密文
 */
function md5_encrypt($data) {
    return md5($data);
}

/**
 * SHA1哈希加密函数
 * @param string $data 要加密的明文
 * @return string 加密后的密文
 */
function sha1_encrypt($data) {
    return sha1($data);
}

以上代码使用PHP内部函数实现了MD5和SHA1两种哈希加密方式,将传入的字符串作为明文进行加密,返回加密后的结果。这种方式比对称加密和非对称加密更简单直接,适用于不需要正确解密的场景,比如用户密码的存储。但是由于哈希算法本身的特性,相同的明文加密出来的结果也是一样的,因此需要在加密前加入一些随机因素,使得相同的明文加密出来的结果也不同。

步骤3:使用加密解密函数

实现完加密解密函数之后,可以在代码中使用这些函数。以下是一个示例代码:

$data = "hello world"; // 要加密的明文
$key = "123456"; // 密钥

// 对称加密示例
$encrypted_data = encrypt($data, $key);
echo "对称加密后的密文: " . $encrypted_data . "\n";
$decrypted_data = decrypt($encrypted_data, $key);
echo "对称解密后的明文: " . $decrypted_data . "\n";

// 非对称加密示例
$keys = generate_keys(); // 生成公钥和私钥
$public_key = $keys['public'];
$private_key = $keys['private'];
$encrypted_data = encrypt($data, $public_key);
echo "非对称加密后的密文: " . $encrypted_data . "\n";
$decrypted_data = decrypt($encrypted_data, $private_key);
echo "非对称解密后的明文: " . $decrypted_data . "\n";

// 哈希加密示例
$hashed_data = md5_encrypt($data);
echo "MD5加密后的密文: " . $hashed_data . "\n";
$hashed_data = sha1_encrypt($data);
echo "SHA1加密后的密文: " . $hashed_data . "\n";

以上代码演示了如何使用对称加密、非对称加密和哈希加密三种方式对数据进行加密解密操作。可以根据实际业务需求选择不同的加密解密方式,并注意密钥的保护和管理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现的三个常用加密解密功能函数示例 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Codeigniter校验ip地址的方法

    下面是 Codeigniter 校验 IP 地址的方法攻略: 目录 准备工作 获取 IP 地址 判断 IP 地址合法性 示例说明 准备工作 在 Codeigniter 中使用 IP 地址校验方法,需要先加载安全辅助函数,可以在控制器中使用以下代码来加载: $this->load->helper(‘security’); 获取 IP 地址 Code…

    PHP 2023年5月23日
    00
  • php获取$_POST同名参数数组的实现介绍

    首先需要明确的是,当表单中出现同名的多个input元素时,POST方法将会将它们包含在一个数组中传递给后端,具体访问方法如下: $postData = $_POST[‘data’]; 此时,$postData将是一个数组,包含了所有同名的input元素的值。 接下来是一些常用的实现方法。 方法一: 如果我们想要获取其中任意一个值,可以通过指定下标进行访问,比…

    PHP 2023年5月26日
    00
  • 浅谈PHP7中的一些小技巧

    浅谈PHP7中的一些小技巧 PHP7是PHP编程语言的最新版本,它引入了许多新的特性和优化,提升了性能和开发效率,同时也增加了一些新的语法和方式。在本文中,我们将介绍一些PHP7中的小技巧,帮助您更好地使用PHP。 1. 使用类型声明 PHP7中引入了类型声明功能,允许您指示函数和方法参数及返回值的类型。这可以提高代码可读性和类型安全性。例如,可以使用以下方…

    PHP 2023年5月26日
    00
  • PHP数组遍历的几种常见方式总结

    PHP数组遍历的几种常见方式总结 在 PHP 中,数组是一种非常常见的数据结构。正确使用 PHP 数组遍历方式可以提高代码的效率。接下来将介绍 PHP 数组遍历的几种常见方式。 1. for 循环遍历 PHP 中使用 for 循环来遍历数组是一种非常常见的方式。通过循环逐一获取数组元素,从而实现对数组的遍历。 $fruit = array(‘apple’, …

    PHP 2023年5月25日
    00
  • PHP反向代理类代码

    以下是详细讲解“PHP反向代理类代码”的完整攻略: 1. 什么是反向代理 在介绍反向代理类的代码之前,先来了解一下什么是反向代理。 反向代理是指代理服务器接收到客户端请求后,将请求转发到内部服务器获取资源,并将响应结果返回给客户端的一种代理方式。相比于正向代理,反向代理更常用于 Web 服务器的负载均衡、缓存、安全过滤等。 2. PHP实现反向代理 要实现一…

    PHP 2023年5月23日
    00
  • Laravel 微信小程序后端实现用户登录的示例代码

    下面我会详细讲解“Laravel 微信小程序后端实现用户登录的示例代码”的完整攻略,其中会包含两条示例说明。 1. 使用 Laravel Passport 实现用户登录 1.1 Laravel Passport 介绍 Laravel Passport 是 Laravel 提供的一个 OAuth2 服务端实现,可以用来实现用户认证和授权功能。使用 Larave…

    PHP 2023年5月23日
    00
  • PHP字典树(Trie树)定义与实现方法示例

    PHP字典树(Trie树)定义与实现方法示例 定义 Trie树,也叫字典树或者单词查找树,是一种树形数据结构,常用于统计或者排序字符串数据集。它能够高效地支持字符串数据的插入、查找和前缀搜索等操作,时间复杂度与字符串长度有关,对于一定量的字符串集合,它的查找效率比哈希表更高。 Trie树与二叉查找树最大的不同在于,Trie树每个节点不仅仅存储一个关键码,而是…

    PHP 2023年5月27日
    00
  • PHP实现通用alert函数的方法

    这里我为你提供一个通用的alert()函数的实现方法,使用PHP语言编写: 创建通用alert函数的方法 第一步:编写PHP函数 我们可以编写一个名为alert()的PHP函数来实现通用alert功能。该函数接受一个字符串参数,作为需要提示给用户的信息。函数代码如下所示: function alert($msg) { echo "<scrip…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部