ホームページ  >  記事  >  バックエンド開発  >  PHPのmcrypt_decrypt()関数の使い方

PHPのmcrypt_decrypt()関数の使い方

青灯夜游
青灯夜游オリジナル
2023-01-10 10:05:102435ブラウズ

PHP では、mcrypt_decrypt() 関数は、指定されたパラメーターを使用して暗号文を復号化するために使用され、構文は "mcrypt_decrypt($cipher,$key,$data,$mode,$iv)"; パラメーター "$key" です。 " はデータ暗号化キーであり、"$data" は指定された "$cipher" と "$mode" を使用して復号化されたデータです。

PHPのmcrypt_decrypt()関数の使い方

#このチュートリアルの動作環境: Windows7 システム、PHP8 バージョン、DELL G3 コンピューター

php mcrypt_decrypt() function

mcrypt_decrypt — 指定されたパラメーターを使用して暗号文を復号化します。構文形式:

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

データを復号化し、平文を返すことができます。

パラメータ:

  • cipher

    MCRYPT_ciphername 定数の 1 つ、または文字列値としてのアルゴリズムの名前。

  • #key
  • データ暗号化キー。キーの長さが暗号化および復号化アルゴリズムでサポートされている有効な長さでない場合は、警告が生成され、false が返されます。

  • data
  • を使用して復号化されます。指定された暗号とモードのデータ。データサイズがn * グループサイズに満たない場合は、「\0」を追加してパディングされます。

  • mode
  • MCRYPT_MODE_modename 定数の 1 つ、または次の文字列の 1 つ: "ecb"、"cbc"、"cfb"、"ofb"、" nofb 」と「ストリーム」。

  • iv
  • は、CBC、CFB、OFB モード、および STREAM モードの一部のアルゴリズムでの初期化に使用されます。リンク モードが指定された IV サイズをサポートしていない場合、または IV が指定されていないがリンク モードでは IV が必要な場合、関数は警告を発行して FALSE を返します。

  • 戻り値:

    復号化されたデータを文字列形式で返すか、失敗した場合は false を返します。

使用例:

<?php
    # --- 加密 ---

    # 密钥应该是随机的二进制数据,
    # 开始使用 scrypt, bcrypt 或 PBKDF2 将一个字符串转换成一个密钥
    # 密钥是 16 进制字符串格式
    $key = pack(&#39;H*&#39;, "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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。