php openssl 加密 解密id 替代mcrypt_encrypt 已转码可在url中使用

php openssl 加密 解密id 替代mcrypt_encrypt 已转码可在url中使用

基于openssl 的加密类, 直接上源码,直接能用


<?php
/**
 * Copyright (C) 
 * @author Roller
 * @date   2018/8/2 11:55
 */

namespace generalRecruit\library;


class Crypt
{
    //base64_encode(openssl_random_pseudo_bytes(32))生成
    private static $key = '+Cm0/dhmcYl7Gko/r+V+pP63RVpeSBX+yn9TB6eAsWo=';
    //base64_encode(openssl_random_pseudo_bytes(16))生成
    private static $iv = 'cR/27pU5TnPAKuNtvV0jdA==';

    /**
     * 加密数据
     * @param string $data 需要加密的数据
     * @return string
     * @author Roller
     * @date   2018/8/2 12:00
     */
    public static function encrypt($data)
    {
        $encrypted = openssl_encrypt($data, 'aes-256-cbc', base64_decode(self::$key), OPENSSL_RAW_DATA, base64_decode(self::$iv));
        return self::base64ToUrl($encrypted);
    }

    /**
     * 解密
     * @param string $encrypted 待解密数据
     * @return string
     * @author Roller
     * @date   2018/8/2 12:00
     */
    public static function decrypt($encrypted)
    {
        $encrypted = self::urlToBase64($encrypted);
        return openssl_decrypt($encrypted, 'aes-256-cbc', base64_decode(self::$key), OPENSSL_RAW_DATA, base64_decode(self::$iv));
    }

    /**
     * base64 转url
     * @param $string
     * @return mixed|string
     * @author Roller
     * @date   2018/8/2 14:08
     */
    private static function base64ToUrl($string)
    {
        $data = base64_encode($string);
        $data = str_replace(array('+', '/', '='), array('-', '_', ''), $data);
        return $data;
    }

    /**
     * url 转base64
     * @param $string
     * @return bool|string
     * @author Roller
     * @date   2018/8/2 14:08
     */
    private static function urlToBase64($string)
    {
        $data = str_replace(array('-', '_'), array('+', '/'), $string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`AES_ecb_encrypt()` 函数封装了AES算法的ECB模式加密操作,它可以对输入的数据进行加密处理并输出加密后的数据。而解密则需要使用 `AES_ecb_decrypt()` 函数,它封装了AES算法的ECB模式解密操作,可以对加密后的数据进行解密处理并输出解密后的数据。 使用该函数需要先引入OpenSSL库的头文件 `openssl/aes.h`,并初始化一个 `AES_KEY` 结构体,然后使用 `AES_set_encrypt_key()` 函数设置加密密钥。接下来,可以使用 `AES_ecb_encrypt()` 函数对数据进行加密处理,该函数的参数包括输入的数据、输出的数据、数据长度和加密密钥。最后,需要释放密钥,使用 `AES_cleanup()` 函数即可。 解密的过程与加密类似,不同的是需要使用 `AES_set_decrypt_key()` 函数设置解密密钥,然后使用 `AES_ecb_decrypt()` 函数对加密后的数据进行解密处理,即可输出解密后的数据。 示例代码如下: ```c #include <openssl/aes.h> #include <string.h> int main() { unsigned char plaintext[] = "Hello, world!"; unsigned char ciphertext[16], decryptedtext[16]; AES_KEY key; AES_set_encrypt_key("0123456789abcdef", 128, &key); // 设置加密密钥 AES_ecb_encrypt(plaintext, ciphertext, &key, AES_ENCRYPT); // 进行加密 AES_set_decrypt_key("0123456789abcdef", 128, &key); // 设置解密密钥 AES_ecb_decrypt(ciphertext, decryptedtext, &key, AES_DECRYPT); // 进行解密 AES_cleanup(&key); // 释放密钥 if (strcmp(plaintext, decryptedtext) == 0) { printf("Decryption successful!\n"); } else { printf("Decryption failed!\n"); } return 0; } ``` 注意:该函数只支持对固定长度的数据进行加密解密,如果需要对变长数据进行加密解密,需要使用其他模式,如CBC、CTR等。同时,ECB模式存在一些安全问题,不建议使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值