• 技术文章 >后端开发 >PHP问题

    php mcrypt_decrypt()函数怎么用

    青灯夜游青灯夜游2023-01-10 10:05:10原创55

    在php中,mcrypt_decrypt()函数用于使用给定参数解密密文,语法“mcrypt_decrypt($cipher,$key,$data,$mode,$iv)”;参数“$key”是数据加密密钥,“$data”是使用给定的“$cipher”和“$mode”解密的数据。

    本教程操作环境:windows7系统、PHP8版、DELL G3电脑

    php mcrypt_decrypt()函数

    mcrypt_decrypt — 使用给定参数解密密文,语法格式:

    mcrypt_decrypt(
        string $cipher,
        string $key,
        string $data,
        string $mode,
        string $iv = ?
    ): string|false

    可以解密 data 并返回明文。

    参数:

    返回值:

    使用示例:

    <?php
        # --- 加密 ---
    
        # 密钥应该是随机的二进制数据,
        # 开始使用 scrypt, bcrypt 或 PBKDF2 将一个字符串转换成一个密钥
        # 密钥是 16 进制字符串格式
        $key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
        
        # 显示 AES-128, 192, 256 对应的密钥长度:
        #16,24,32 字节。
        $key_size =  strlen($key);
        echo "Key size: " . $key_size . "n";
        
        $plaintext = "This string was AES-256 / CBC / ZeroBytePadding encrypted.";
    
        # 为 CBC 模式创建随机的初始向量
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        
    
        # 创建和 AES 兼容的密文(Rijndael 分组大小 = 128)
        # 仅适用于编码后的输入不是以 00h 结尾的
        # (因为默认是使用 0 来补齐数据)
        $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
                                     $plaintext, MCRYPT_MODE_CBC, $iv);
    
        # 将初始向量附加在密文之后,以供解密时使用
        $ciphertext = $iv . $ciphertext;
        
        # 对密文进行 base64 编码
        $ciphertext_base64 = base64_encode($ciphertext);
    
        echo  $ciphertext_base64 . "n";
    
        # === 警告 ===
    
        # 密文并未进行完整性和可信度保护,
        # 所以可能遭受 Padding Oracle 攻击。
        
        # --- 解密 ---
        
        $ciphertext_dec = base64_decode($ciphertext_base64);
        
        # 初始向量大小,可以通过 mcrypt_get_iv_size() 来获得
        $iv_dec = substr($ciphertext_dec, 0, $iv_size);
        
        # 获取除初始向量外的密文
        $ciphertext_dec = substr($ciphertext_dec, $iv_size);
    
        # 可能需要从明文末尾移除 0
        $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
                                        $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
        
        echo  $plaintext_dec . "n";
    ?>

    以上例程会输出:

    Key size: 32
    ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU=
    This string was AES-256 / CBC / ZeroBytePadding encrypted.

    推荐学习:《PHP视频教程

    以上就是php mcrypt_decrypt()函数怎么用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php
    上一篇:php 一维数组怎么增加元素 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php怎么去掉数组元素中的html标签• php数组可以用哪些键名• php怎么使用指定符号分割字符串转数组• php怎么检查关联数组中指定元素是否存在• php怎么求数组元素相加之和• php中多个数组怎么求和
    1/1

    PHP中文网