您的位置 首页 php

php中加密解密DES的正确使用姿势

前言 :在平时的开发中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,今天就将就DES加密正确使用

任务流程图

7ed4db60281eb7ca924cb5b3377e0a1.png

片段1

说干就干,我开始编写des加密类 代码如下

class DES{    var $key;    var $iv; //偏移量     function DES( $key, $iv=0 ) {        //key长度8例如:1234abcd        $this->key = $key;        if( $iv == 0 ) {            $this->iv = $key;        } else {            $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );        }    }     function encrypt($str) {        //加密,返回大写十六进制字符串        $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );        $str = $this->pkcs5Pad ( $str, $size );        return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );    }     function decrypt($str) {        //解密        $strBin = $this->hex2bin( strtolower( $str ) );        $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );        $str = $this->pkcs5Unpad( $str );        return $str;    }     function hex2bin($hexData) {        $binData = "";        for($i = 0; $i < strlen ( $hexData ); $i += 2) {            $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );        }        return $binData;    }     function pkcs5Pad($text, $blocksize) {        $pad = $blocksize - (strlen ( $text ) % $blocksize);        return $text . str_repeat ( chr ( $pad ), $pad );    }     function pkcs5Unpad($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 );    }}

测试代码

<?phpheader("Content-type: text/html; charset=utf-8");error_reporting(0);require "DES5.php";// 秘钥$key = 'MOxinrui';$crypt = new DES5($key);$str = 'podsmia';echo "原字符是".$str.'<br>';$encrypt_str = $crypt->encrypt($str);echo "加密后的字符是".$encrypt_str.'<br>';$decrypt_str= $crypt->decrypt($encrypt_str);echo "解密后的字符是".$decrypt_str.'<br>';

效果

原字符是podsmia加密后的字符是9490E64136137FD8解密后的字符是podsmia

过了几天,我闲着没事,继续运行一下代码

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; DES5 has a deprecated constructor in D:\phpstudy_pro\WWW\des\DES5.php on line 2

原字符是podsmia

Fatal error: Uncaught Error: Call to undefined function mcrypt_get_block_size() in D:\phpstudy_pro\WWW\des\DES5.php:19 Stack trace: #0 D:\phpstudy_pro\WWW\des\1.php(10): DES5->encrypt('podsmia') #1 {main} thrown in D:\phpstudy_pro\WWW\des\DES5.php on line 19

给我报了 fatalerror 这不科学啊,我什么都没动啊。怎么回事呢。后面经过一番研究。发现是php版本的问题。我之前运行成功,那是因为我用的 是php5.5,但是这次报错我用的是php7.2.。那么我需要找替代方案。。接下来看我操作

片段2

<?phpclass DES7{    //要改的加密    public function desEncrypt($str,$key) {        $iv = $key;        $data = openssl_encrypt($str,"DES-CBC",$key,OPENSSL_RAW_DATA,$iv);        $data = strtolower(bin2hex($data));        return $data;    }     //要改的解密    public function desDecrypt($str,$key) {        $iv = $key;        return openssl_decrypt (hex2bin($str), 'DES-CBC', $key, OPENSSL_RAW_DATA,$iv);    }}

测试代码

<?phpheader("Content-type: text/html; charset=utf-8");//error_reporting(0);// 秘钥require "DES7.php";$key = 'MOxinrui';$crypt = new DES7($key);$str = '问哪个';echo "原字符是".$str.'<br>';$encrypt_str = $crypt->desEncrypt($str,$key);echo "加密后的字符是".$encrypt_str.'<br>';$decrypt_str= $crypt->desDecrypt($encrypt_str,$key);echo "解密后的字符是".$decrypt_str.'<br>';

效果

原字符是问哪个加密后的字符是074b8beee21eefca7ec3a60cb8edda18解密后的字符是问哪个

问题完美解决。大家以后遇到这种问题,直接照搬我的代码即可,方便省事。

更多PHP相关知识,请访问PHP教程!

以上就是php中加密解密DES的正确使用姿势的详细内容,更多请关注求知技术网其它相关文章!

文章来源:智云一二三科技

文章标题:php中加密解密DES的正确使用姿势

文章地址:https://www.zhihuclub.com/2169.shtml

关于作者: 智云科技

热门文章

发表评论

您的电子邮箱地址不会被公开。

56条评论

  1. Excellent website. Lots of helpful info here.
    I’m sending it to some friends ans additionally
    sharing in delicious. And of course, thanks for your effort!

  2. Nice post. I learn something new and challenging on sites I stumbleupon every day.
    It’s always useful to read content from other
    authors and use something from their web sites.

  3. We will teach you how to earn $ 7000 per hour. Why?
    We will profit from your profit.

  4. Карты для интернет оплаты.

    Карты банков вне санкций.

  5. What’s up, this weekend is fastidious designed for me, since this point in time i am reading this fantastic informative paragraph here at
    my home.

  6. Can I simply just say what a comfort to uncover someone who really knows what they are discussing on the internet.
    You definitely understand how to bring a problem to light and
    make it important. More and more people must check this out and understand this side of the story.
    It’s surprising you are not more popular because you definitely have the gift.

  7. We will teach you how to earn $ 7000 per hour.
    Why? We will profit from your profit.

  8. We will teach you how to earn $ 7000 per hour. Why? We will profit from your
    profit.

  9. We will teach you how to earn $ 7000 per hour. Why? We will profit from your profit.

  10. It’s really very complex in this active life to listen news on Television,
    therefore I only use the web for that purpose,
    and take the most up-to-date news.

  11. We will teach you how to earn $ 7000 per hour.
    Why? We will profit from your profit.

  12. We will teach you how to earn $ 7000 per hour. Why? We will profit from your profit.

  13. We will teach you how to earn $ 7000 per hour.
    Why? We will profit from your profit.

  14. We will teach you how to earn $ 7000 per hour. Why? We will profit from your profit.

  15. Стратегия бинарных опционов 10 $ до 8000$ за час

  16. We will teach you how to earn $8000 per hour.
    Why? We will profit from your profit.

  17. Trade Forex Bitcoin binary option min deposit 10$-Trading futures contracts with leverage X5-X100.

  18. Trade Forex Bitcoin binary option min deposit 10$-Trading futures contracts with leverage X5-X100.

  19. Trade Forex Bitcoin binary option min deposit 10$-Trading futures contracts with
    leverage X5-X100.

  20. Trade Forex Bitcoin binary option min deposit 10$-Trading futures contracts with leverage
    X5-X100.

  21. Trade Forex Bitcoin binary option min deposit 10$-Trading futures contracts with leverage X5-X100.

  22. Make money trading opions.
    The minimum deposit is 10$.
    Learn how to trade correctly. How to earn from $10 to $15000 a day.

    The more you earn, the more profit we get.

  23. Trade Forex Bitcoin binary option min deposit 10$-Trading futures contracts with leverage X5-X100.

  24. We will teach you how to earn $8000 per hour. Why? We will profit from your profit.

  25. Free adult webcam free. Free registration.Free web cam women,men,transgender.

  26. Link exchange is nothing else but it is simply placing the other person’s webpage link on your page
    at suitable place and other person will also do same in support of you.

  27. You’ve made some really good points there. I checked on the web
    for more information about the issue and found most people
    will go along with your views on this web site.

  28. Make money trading opions. The minimum deposit is
    10$.
    Lean how to trade correctly.
    How to earn fromr $50 to $10000 a day. The more you earn, the more profit we get.

  29. Internet earnings – attract new clients to binary options and get profit up to
    50% (from $100-$50,000 per month). Payouts every week. Read
    more here.

  30. We will teach you how to earn $ 7000 per hour.
    Why? We will profit from your profit.

网站地图