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

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

步骤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日

相关文章

  • PHP实现的文件操作类及文件下载功能示例

    PHP 实现的文件操作类可以帮助我们更加方便地管理和操作文件,包括创建、读取、写入、修改和删除文件等操作。同时,文件下载功能是一个非常常见的功能,我们可以通过 PHP 来实现文件下载。 以下是实现文件操作类及文件下载的完整攻略: 一、创建文件操作类 1.1 创建文件操作类的基本结构 创建文件操作类的基本结构如下所示: class FileHandler { …

    PHP 2023年5月26日
    00
  • PHP中__get()和__set()的用法实例详解

    下面是关于“PHP中__get()和__set()的用法实例详解”的攻略: 什么是__get()和__set() __get() 和 __set() 是两个魔术方法(Magic Method)。 __get() 和 __set() 可以让我们在访问或者设置一个对象的属性时,可以添加额外的处理逻辑。 __get()的用法 当我们访问一个对象属性时,如果该属性不…

    PHP 2023年5月25日
    00
  • 推荐10个提供免费PHP脚本下载的网站

    以下是推荐10个提供免费PHP脚本下载的网站的完整攻略。 1. 确定搜索关键词 为了找到可靠的并提供免费PHP脚本下载的网站,我们需要在搜索引擎中使用正确的关键词,比如“免费PHP脚本下载”、“PHP脚本库”、“PHP脚本分享”等。 2. 选择可靠的网站 在搜索结果中选择可靠的网站非常重要,因为网上充斥着大量的虚假或低质量的网站,它们可能会提供病毒或恶意软件…

    PHP 2023年5月23日
    00
  • 用ActivePHP打造版本管理系统

    使用ActivePHP打造版本管理系统,主要分为以下几个步骤: 1. 安装ActivePHP ActivePHP是一个基于PHP的后端框架,提供丰富的工具和组件,可以快速地搭建Web应用程序。安装ActivePHP的方式很简单,直接通过Composer进行安装即可: composer require activephp/activephp 2. 初始化项目 …

    PHP 2023年5月24日
    00
  • PHP中国际化的字符串排序和比较对象详解

    PHP中国际化的字符串排序和比较对象详解 什么是字符串排序和比较? 在编程中,我们经常需要比较和排序字符串,以便对数据进行正确定序和处理。字符串排序通常基于字母表顺序,而字符串比较则可以基于例如字符串的长度等其他因素。 为何需要中国际化的字符串排序和比较? 在中国,我们有一些常见的汉字和字符,例如“阿姨”和“啊呀”,它们在标准的字符串排序中按照字母表排序的话…

    PHP 2023年5月26日
    00
  • PHP的pcntl多进程用法实例

    PHP的pcntl是一种多进程扩展,可以帮助PHP程序员方便地实现多进程编程。下面将详细讲解PHP的pcntl多进程用法实例,包括pcntl的安装、使用方法和实例说明。 安装pcntl扩展 在Linux系统中,可以使用以下命令安装pcntl扩展: sudo apt-get install php-pcntl 安装成功后,可以使用phpinfo()函数来检查p…

    PHP 2023年5月23日
    00
  • PHP实现下载远程图片保存到本地的方法

    实现下载远程图片保存到本地的方法,可以采用PHP的curl库来实现。具体步骤如下: 步骤一:开启curl扩展 在PHP中使用curl库,需要开启curl扩展。如果你的PHP环境中没有安装curl扩展,可以在php.ini配置文件中添加如下配置: extension=curl.so (Linux) extension=curl.dll (Windows) 步骤…

    PHP 2023年5月27日
    00
  • js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析

    我来详细讲解一下“js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析”的完整攻略。 JS限制CheckBox勾选的个数 有时候我们需要限制用户勾选CheckBox的个数,比如在一个选择题的页面中,用户只能选择一个答案。下面是实现此功能的步骤: 在HTML中为每一个CheckBox添加一个onClick事件,调用一个函数来判断…

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