PHPで一般的に使用されるいくつかの暗号化方式を共有します。

アプリケーションのシナリオは、ユーザーの一意の識別(記事の暗号化IDがクローラーを防止する)、通常のコードの生成、およびログインパスワードの暗号化です。

hashidsを使用してデモを暗号化します(ユーザーの一意の識別、記事の暗号化IDでクロールを防止)

文字列と16進数間の変換暗号化(通常のコードを生成)

   /**
     * 字符串转十六进制
     * @param $string
     * @return string
     */
    public function str_encode($string)
    {
    
    
        $hex="";
        for($i=0;$i<strlen($string);$i++){
    
    
           $hex.=dechex(ord($string[$i]));
        }
        $hex=strtolower($hex);
        return $hex;
    }

   /**
     * 十六进制转字符串
     * @param $hex
     * @return string
     */
    public function str_decode($hex){
    
    
        $string="";
        for($i=0;$i<strlen($hex)-1;$i+=2){
    
    
            $string.=chr(hexdec($hex[$i].$hex[$i+1]));
        }
        return  $string;
    }

ユーザーがログインすると、図に示すように、アカウントのパスワードがクリアテキストで送信されます。


安全な暗号化パスワードに変更してください

シンプルなopenssl_encrypt暗号化

    public function encrypt($string)
    {
    
    
        // openssl_encrypt 加密不同Mcrypt,对秘钥长度要求,超出16加密结果不变
        $method = 'DES-ECB';//加密方法
        $passwd = '12344321';//加密密钥
        $data = openssl_encrypt($string, $method, $passwd);
        return $data;
    }
     public function decrypt($string)
    {
    
    
        $method = 'DES-ECB';//加密方法
        $passwd = '12344321';//加密密钥
        $decrypted = openssl_decrypt($string, $method, $passwd);

        return $decrypted;
    }

ログインパスワードの暗号化


    /**
     * 生成key和iv的地址:https://asecuritysite.com/encryption/keygen
     *              https://asecuritysite.com/encryption/PBKDF2z
     */
     
    /**
     * @param string $string 需要加密的字符串
     * @return string
     */
    public function encrypt($string)
    {
    
    
        // openssl_encrypt 加密不同Mcrypt,对秘钥长度要求,超出16加密结果不变
        $data = openssl_encrypt($string, 'AES-192-CBC',pack('H*', env('ENCRYPT_KEY')), OPENSSL_RAW_DATA,pack('H*', env('ENCRYPT_IV')));

        $data = base64_encode($data);
        return $data;
    }
    /**
     * @param string $string 需要解密的字符串
     * @return string
     */
    public function decrypt($string)
    {
    
    
        $decrypted = openssl_decrypt(base64_decode($string), 'AES-192-CBC',  pack('H*', env('ENCRYPT_KEY')), OPENSSL_RAW_DATA,pack('H*', env('ENCRYPT_IV')));

        return $decrypted;
    }
ENCRYPT_KEY=ENCRYPT_KEY
ENCRYPT_IV=ENCRYPT_IV

上記はAES-192-CBC暗号化方式を使用しています

AES:

aesは、データブロックベースの暗号化方式です。つまり、処理された各データは1ブロック(16バイト)であり、データが16バイトの倍数ではない場合に入力されます。これは、いわゆるブロック暗号です(ビットベースとは異なります)。ストリーム暗号)、16バイトはパケット長です

パケット暗号化のいくつかのモード:

ECB:基本的な暗号化方法であり、暗号文は同じ長さのブロックに分割され(埋めるには不十分)、1つずつ暗号化され、1つずつ出力されて暗号文が形成されます。

CBC:これは循環モードであり、前のグループの暗号文と現在のグループの平文がXORされてから暗号化されます。これは、クラッキングの難易度を高めることを目的としています。

CFB / OFB:実際にはフィードバックモードであり、目的はクラッキングの難易度を上げることです。

FCBとCBCの暗号化結果は異なり、2つのモードは異なり、CBCは最初の暗号ブロックが操作されるときに初期化ベクトルを追加します。

継続的に更新

おすすめ

転載: blog.csdn.net/qq175023117/article/details/107354542