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实现的三个常用加密解密功能函数示例

基础教程推荐