• 微信小程序des加密、PHP des解密


    最近在做对小程序传输数据进行加密,加密方法有很多,使用的是des对称加密 采用的是CBC模式,

    引用的插件为tripledes.js,https://github.com/Favour1111in/hello-world/tree/master

    需要传入内容,密钥,初始化向量3个参数

    var server = require('../../utils/server.js');
    var CryptoJS = require('../../utils/tripledes.js');
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        val: ''
      },
      input(e) {
        var val = e.detail.value;
        this.encrypt(val);
      },
      encrypt(val) {
        var pwd = 'lib123123';  //这里需要传入8个字节以上的密钥
        var iv = '123123123';
        var encryptData = this.encryptByDESModeCBCUtf8to64(val, pwd, iv);
        console.log(encryptData);
        this.setData({
          encryptData: encryptData
        })
        server.postJSON('Index/decrypt', { data: encryptData, pwd: pwd, iv: iv }, function (res) {
          console.log(res);
        })
      },
      encryptByDESModeCBCUtf8to64(message, key, iv) {
        var keyHex = CryptoJS.enc.Utf8.parse(key);
        var ivHex = CryptoJS.enc.Utf8.parse(iv);
        var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
          iv: ivHex,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
        })
        return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
      }
    })
    <view>
      <input style='border-bottom:1rpx solid #eaeaea' bindblur='input' placeholder='输入内容'></input>
    </view>
    <view>{{encryptData}}</view>

    输入内容,然后会进行des加密

     

    后台使用的PHP进行des解密的,因为刚学PHP没多久,所以借鉴了网上的方法

    public function decrypt(){
            $data=I('post.data');
            $pwd=I('post.pwd');
            $iv=I('post.iv');
            $encrypted = base64_decode($data); //如需转换二进制可改成 bin2hex 转换
            $key = str_pad($pwd,8,'0'); //3DES加密将8改为24
            $td = mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,'');//3DES加密将MCRYPT_DES改为MCRYPT_3DES
            if( $iv == '' )
            {
                $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            }
            @mcrypt_generic_init($td, $key, $iv);
            $decrypted = mdecrypt_generic($td, $encrypted);
            mcrypt_generic_deinit($td);
            mcrypt_module_close($td);
            $y=$this->pkcs5_unpad($decrypted);
            $this->ajaxReturn($y);
        }
        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);
        }

    最终前端获取的结果就是加密输入的内容

    在这里,我遇到过一个小问题,就是mcrypt_module_open函数使用不了,开始网上找了很多方法,有去掉extension前面分号的,

    还有就是下载php_mcrypt.dll和libmcrypt.dll,都没有成功,最终结果还是因为phpstrom版本太高,这个函数在最新版本不兼容,

    所以如果有类似小伙伴遇到mcrypt_module_open函数不能用的情况下,看下编辑器版本是否过高

  • 相关阅读:
    河南省第十二届大学生程序设计竞赛 F: Information Transmission-1(二分图最大匹配)
    hdu1068:Girls and Boys(最大独立集)
    hdu1068:Girls and Boys(最大独立集)
    hdu1281:棋盘游戏(二分图最大匹配)
    hdu1281:棋盘游戏(二分图最大匹配)
    洛谷P1991 :无线通讯网(最小生成树)
    洛谷P1991 :无线通讯网(最小生成树)
    oGitHub 注册
    Lambda应用设计模式 [转载]
    读取excel数据 到 datagrid 出现 找不到可安装的ISAM
  • 原文地址:https://www.cnblogs.com/dongzhi1111/p/9244461.html
Copyright © 2020-2023  润新知