`
alfred_long
  • 浏览: 566215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP AES 算法 使用iv

    博客分类:
  • PHP
阅读更多

直接上代码

<?php
class AES
{
    protected $cipher = MCRYPT_RIJNDAEL_128; //根据需要选择
    protected $mode = MCRYPT_MODE_CBC; //根据需要选择
    protected $pad_method = NULL;
    protected $secret_key = 'AadfAenfDIEldfja';
    protected $iv = '1238389483762837';
 
    public function set_cipher($cipher)
    {
        $this->cipher = $cipher;
    }
 
    public function set_mode($mode)
    {
        $this->mode = $mode;
    }
 
    public function set_iv($iv)
    {
        $this->iv = $iv;
    }
 
    public function set_key($key)
    {
        $this->secret_key = $key;
    }
 
    public function require_pkcs5()
    {
        $this->pad_method = 'pkcs5';
    }
 
    protected function pad_or_unpad($str, $ext)
    {
        if ( is_null($this->pad_method) )
        {
            return $str;
        }
        else
        {
            $func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad';
            if ( is_callable($func_name) )
            {
                $size = mcrypt_get_block_size($this->cipher, $this->mode);
                return call_user_func($func_name, $str, $size);
            }
        }
        return $str;
    }
 
    protected function pad($str)
    {
        return $this->pad_or_unpad($str, '');
    }
 
    protected function unpad($str)
    {
        return $this->pad_or_unpad($str, 'un');
    }
 
    public function encrypt($str)
    {
        $str = $this->pad($str);
        $td = mcrypt_module_open($this->cipher, '', $this->mode, '');
 
        if ( empty($this->iv) )
        {
            $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        }
        else
        {
            $iv = $this->iv;
        }
 
        mcrypt_generic_init($td, $this->secret_key, $iv);
        $cyper_text = mcrypt_generic($td, $str);
        //$rt=base64_encode($cyper_text);
        $rt = bin2hex($cyper_text);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
 
        return $rt;
    }
 
    public function decrypt($str){
        $td = mcrypt_module_open($this->cipher, '', $this->mode, '');
 
        if ( empty($this->iv) )
        {
            $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        }
        else
        {
            $iv = $this->iv;
        }
 
        mcrypt_generic_init($td, $this->secret_key, $iv);
        //$decrypted_text = mdecrypt_generic($td, self::hex2bin($str));
        //$decrypted_text = mdecrypt_generic($td, base64_decode($str));
        $str = pack("H*", $str);
        $decrypted_text = mdecrypt_generic($td, $str);
        $rt = $decrypted_text;
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
 
        return $this->unpad($rt);
    }
 
    public static function hex2bin($hexdata) {
        $bindata = '';
        $length = strlen($hexdata);
        for ($i=0; $i < $length; $i += 2)
        {
            $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
        }
        return $bindata;
    }
 
    public static function pkcs5_pad($text, $blocksize)
    {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }
 
    public static function pkcs5_unpad($text)
    {
        $pad = ord($text{strlen($text) - 1});
        if ($pad > strlen($text)) return false;
        if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
        return substr($text, 0, -1 * $pad);
    }
}
 
$plainText = '12345678';
$aes = new AES();
$aes->require_pkcs5();
$encText = $aes->encrypt($plainText);
$decString = $aes->decrypt($encText);
 
echo $encText."\n".$decString."\n";

 

分享到:
评论

相关推荐

    PHP实现AES加密.doc

    本文档介绍了如何使用 PHP 实现 AES 加密,包括 AES 算法的基本原理、PHP 中的实现方法以及相关的知识点。 一、AES 算法的基本原理 AES 算法是一种对称加密算法,使用相同的密钥进行加密和解密。AES 算法的加密...

    phpaes加密解密类库

    类的构造函数可能接收初始化向量(IV)和密钥作为参数,这些是AES算法的重要组成部分。IV用于增加加密的随机性,而密钥是加密和解密过程中的关键,必须保密。类中可能包含如`encrypt()`和`decrypt()`这样的方法,分别...

    PHP C++ aes128加密算法

    在C++中,通常会使用如Crypto++或OpenSSL等库来实现AES算法。这两个文件应该定义了类的接口,包括初始化密钥、设置加密模式(如CBC、ECB、CFB等)、以及执行加密和解密操作的方法。 为了使PHP和C++之间的通信有效,...

    PHP中AES(128)加密算法

    在PHP中,AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,用于保护数据的安全性。AES支持多种密钥长度,如128位、192位和256位,其中128位是默认且最常用的选择。本篇文章将深入探讨PHP中的AES-...

    AES算法C++和Java互解

    标题 "AES算法C++和Java互解" 涉及的核心技术是高级加密标准(AES,Advanced Encryption Standard),这是一种广泛使用的对称加密算法,用于保护数据的安全性。在这个主题下,我们将深入理解AES的工作原理,以及如何...

    delphi AES加解密算法

    这是因为在不同编程语言中,AES算法的标准和实现通常是相同的,只要确保使用相同的密钥、初始向量(IV)以及加密模式,就可以在Delphi、PHP和Java之间进行无缝的数据交换。 **PHP** 和 **JAVA** 也是支持AES的编程...

    java,php,GOLang,JavaScript,AES加密解密代码互通

    PHP使用`openssl_encrypt`和`openssl_decrypt`函数实现AES。密钥和初始向量(IV)可以通过`str_pad`确保达到16字节(128位)。PHP默认使用PKCS7填充,与Java的PKCS5Padding类似。 3. **GOLang的AES ECB加密解密**...

    jquery实现aes加密,后端php解密

    在这个场景中,我们讨论的是前端使用jQuery配合crypto-js库进行AES加密,而后端通过PHP的openssl_decrypt函数进行解密。这是一个典型的客户端加密、服务器解密的模式,可以有效防止数据在传输过程中被截取。 **AES...

    一个采用AES算法的加密模块和调用示例(VB)

    在本资源中,我们有一个采用AES算法的加密模块,它以VB(Visual Basic)语言编写,可以方便地集成到各种应用程序中,如编译成DLL后,可用于Web、ASP、PHP、Java、VB、VC、Excel、Word等多个平台。 AES加密算法基于...

    AES加密PHP版

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,用于保护数据的安全性。在PHP和Java之间进行AES加密时,由于实现细节的差异,可能会导致加密结果不一致。本资源"PHP实现的AES加密类"旨在解决这...

    基于PHP和JS的AES相互加密解密方法详解(CryptoJS)_PHP_JS_AES源码

    本文将深入探讨如何使用PHP和JavaScript(JS)实现AES(Advanced Encryption Standard)加密解密技术。AES是一种强大的对称加密算法,广泛应用于数据保护,确保信息在互联网上传输时不被窃取或篡改。 首先,我们来...

    php+uni-app AES加密解密.rar

    当PHP服务器和uni-app客户端需要进行AES加密数据交换时,必须确保双方使用相同的密钥和IV。通常,密钥可以通过非对称加密(如RSA)在客户端和服务器之间安全地传递,而IV可以在每次加密时随机生成,并随密文一起...

    php AES加密解密

    - **初始化向量(IV)**:使用固定的`$iv_string`作为IV,虽然这在某些场景下可能不够安全,但对于简单应用足够。 - **填充算法**:使用PKCS7填充算法对不足块大小的字符串进行填充,以确保加密数据的完整性。 - **...

    php使用openssl_encrypt中的AES-128-ECB加密解密

    在PHP中,`openssl_encrypt`函数是用于执行各种加密操作的核心工具,包括使用AES-128-ECB(Advanced Encryption Standard with a 128-bit key in Electronic Codebook mode)算法进行数据加密和解密。AES是一种广泛...

    php aes 128 ecb 加密

    AES128指的是AES算法中使用128位(16字节)的密钥长度,这种长度的密钥提供了非常高的安全性。ECB模式是AES加密的一种工作模式,它将明文分成固定大小的块独立加密,但不考虑前后块的关联,因此在处理大量重复数据时...

    php aes加密类 128,192,256位数加密多位数

    在PHP中,可以使用内置的mcrypt库或者openssl扩展来实现AES加密。然而,根据提供的文件名`aesctr.class.php`和`aes.class.php`,我们可以推测这可能是两个自定义的AES加密类。此类文件通常包含了一系列方法,用于...

    AES-CBC-128(c#、cpp、php)

    使用CBC模式时,我们需要创建一个`Aes`实例,设置Key和IV,然后使用`CreateEncryptor`或`CreateDecryptor`方法生成加密或解密的ICryptoTransform对象。之后,我们可以用`TransformFinalBlock`方法处理数据。注意,...

    标准PHP的AES加密算法类_.docx

    在这里,IV使用`mcrypt_create_iv`随机生成,但由于使用了ECB模式,IV实际上并未使用。`decrypt`方法则对应地进行解密。 请注意,PHP的`mcrypt`扩展在较新的版本中已被弃用,建议使用`openssl`扩展来进行加密解密...

    net、php的AES加密

    AES,全称Advanced Encryption Standard(高级加密标准),是一种广泛应用的块密码算法,为现代数据加密提供了强健的安全保障。在.NET和PHP之间进行AES加密的数据交换时,确保两端的加密结果一致是至关重要的,这...

    基于PHP和JS的AES相互加密解密方法

    AES是一种广泛采用的对称加密算法,具有较高的安全性和效率。 首先,我们需要了解AES加密的基本原理。AES使用相同的密钥进行加密和解密,它的工作模式有ECB(电子密码本)、CBC(密码分组链接)、CFB(密码反馈)等...

Global site tag (gtag.js) - Google Analytics