微信小程序des加密PHP des解密
Posted 白色发箍的你
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序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函数不能用的情况下,看下编辑器版本是否过高
以上是关于微信小程序des加密PHP des解密的主要内容,如果未能解决你的问题,请参考以下文章