php mcrypt取消,php – Mcrypt弃用后如何解密?

我已将我的php版本更新为7.1.

我有使用mcrypt加密数据的功能.

现在不推荐使用此功能.

无论如何我都可以通过回到旧版本的php来解密数据.

这是我使用的代码:

public function encrypt($plaintext) {

$ivSize = mcrypt_get_iv_size(self::CIPHER, self::MODE);

$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);

$ciphertext = mcrypt_encrypt(self::CIPHER, $this->key, $plaintext, self::MODE, $iv);

return base64_encode($iv.$ciphertext);

}

public function decrypt($ciphertext) {

$ciphertext = base64_decode($ciphertext);

$ivSize = mcrypt_get_iv_size(self::CIPHER, self::MODE);

if (strlen($ciphertext) < $ivSize) {

throw new Exception('Missing initialization vector');

}

$iv = substr($ciphertext, 0, $ivSize);

$ciphertext = substr($ciphertext, $ivSize);

$plaintext = mcrypt_decrypt(self::CIPHER, $this->key, $ciphertext, self::MODE, $iv);

return rtrim($plaintext, "\0");

}

使用常量:

const CIPHER = MCRYPT_RIJNDAEL_128; // Rijndael-128 is AES

const MODE = MCRYPT_MODE_CBC;

我看到建议使用OpenSSL.这是我将从现在开始使用的.但是如何使用此方法解密旧数据?

谢谢

编辑:

我知道我可以使用OpenSSL作为替代方案.

这就是我从现在开始为内容做的事情.

但是我需要从旧内容中解密我的加密代码.

*编辑请求@symcbean

尝试用OpenSSL解密如下:

public function decrypt($ciphertext) {

$ciphertext = base64_decode($ciphertext);

if (!function_exists("openssl_decrypt")) {

throw new Exception("aesDecrypt needs openssl php module.");

}

$key = $this->key;

$method = 'AES-256-CBC';

$ivSize = openssl_cipher_iv_length($method);

$iv = substr($ciphertext,0,$ivSize);

$data = substr($ciphertext,$ivSize);

$clear = openssl_decrypt ($data, $method, $key, 'OPENSSL_RAW_DATA'|'OPENSSL_ZERO_PADDING', $iv);

return $clear;

}

最佳答案 需要注意的重要一点是,如果它不是块大小的倍数,则

mcrypt_encrypt零填充输入数据.如果数据本身具有尾随零,则会导致模糊结果.

openssl_decrypt不会自动删除零填充,因此您只能留下修剪尾随空值的可能性.

这是一个简单的例子:

$data = "Lorem ipsum";

$key = "1234567890abcdef";

$iv = "1234567890abcdef";

$encrypted = mcrypt_encrypt(

MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);

echo bin2hex($encrypted) . "\n";

$decrypted = openssl_decrypt(

$encrypted, "AES-128-CBC", $key,

OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);

echo var_export($decrypted, true) . "\n";

$result = rtrim($decrypted, "\0");

echo var_export($result, true) . "\n";

输出:

70168f2d5751b3d3bf36b7e6b8ec5843

'Lorem ipsum' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . ''

'Lorem ipsum'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线条边框简笔画图片大全_儿童简笔画画大全人物

由于简笔画有概括、形象、幽默、简练的特点,符合儿童生理、心理发展的需要,便于儿童接受与掌握。儿童简笔画画大全人物有哪些呢?下面由学习啦小编带来的儿童简笔画画大全人物&#xff0c;欢迎欣赏!儿童人物简笔画画图片大全欣赏儿童简笔画画人物图1&#xff1a;跳舞的小女孩简…

求两条轨迹间的hausdorff距离_题型 | 圆上有n个点到直线距离为d?

圆上有n个点到直线的距离为d圆 上到直线 的距离为 的点有&#xff08; &#xff09;个方法一&#xff1a;常规方法&#xff0c;画图分析由图象可以明显看出&#xff0c;圆在直线上方的部分内没有满足题意的点&#xff0c;在直线下方的部分内有两个满足题意的点。但是这样的方法…

java字符串包含连续数字,Java中包含数字的排序字符串

小编典典尝试使用此比较器&#xff0c;该比较器将删除所有非数字字符&#xff0c;然后将其余字符与数字进行比较&#xff1a;Collections.sort(strings, new Comparator() {public int compare(String o1, String o2) {return extractInt(o1) - extractInt(o2);}int extractInt…

MyEclipse的Debug模式

在MyEclipse中使用debug模式 1, 首先在一个java文件中设断点&#xff0c;然后运行&#xff0c;当程序走到断点处就会转到debug视图下&#xff0c; 2, F5键与F6键均为单步调试&#xff0c;F5是step into,也就是进入本行代码中执行&#xff0c;F6是step over&#xff0c; 也就是执…

redis setnx 分布式锁_Redis 分布式锁PHP

Redis 分布式锁的作用在单机环境下&#xff0c;有个秒杀商品的活动&#xff0c;在短时间内&#xff0c;服务器压力和流量会陡然上升。这个就会存在并发的问题。想要解决并发需要解决一下问题1、提高系统吞吐率也就是qps 每秒处理的请求书解决问题一&#xff1a;采用内存型数据库…

mysql备份至本地,mysql备份(本地+远程)

整体规划生产环境的mysql数据库&#xff0c;应当每日进行备份&#xff0c;并对较远之前的备份进行删除&#xff0c;由于担心mysql服务器本身崩溃&#xff0c;因此需要考虑将备份的文件同时保存到其他服务器&#xff0c;这样能提高数据安全。备份的方式使用mysqldump&#xff0c…

WinForm窗体自适应分辨率

我们自己编写程序的界面&#xff0c;会遇到各种屏幕分辨率&#xff0c;只有自适应才能显的美观。实际上&#xff0c;做到这点也很简单&#xff0c;就是首先记录窗体和它上面控件的初始位置和大小&#xff0c;当窗体改变比例时&#xff0c;其控件的位置和大小也按此比例变化即可…

ping端口_干货分享:shell脚本批量telnet ip 端口

问1&#xff1a;亲&#xff0c;请教个问题&#xff0c;我这边有200台服务器&#xff0c;怎么看它是否在线呢&#xff1f;答&#xff1a;简单&#xff0c;下载个PingInfoView直接批量ping下&#xff0c;能ping通的就在线&#xff0c;反之离线。问2&#xff1a;那怎么看我这200台…

关于PHP代码的开始和结束标签书写,关于PHP结束标签?gt;的使用细节

当PHP解析一个文件时&#xff0c;会寻找开始&#xff0c;标记告诉PHP开始和停止解释其中的代码。此种方式的解析可以使PHP嵌入到各种不同的文档中&#xff0c;凡是在一对开始和结束标记之外的内容都会被PHP解析器忽略。大多数情况下PHP都是嵌入在HTML文档中的。单行注释仅仅注释…

IIS 7.0 部署MVC

开发的MVC 3.0 项目&#xff0c;在部署服务上还是与需要花一点功夫&#xff0c;这里把遇到的问题罗列出来。 本文主要介绍IIS 7.5中安装配置MVC 3.0的具体办法&#xff01; 部署必备&#xff1a; Microsoft .net FrameWork 4.0安装包 安装ASP.NET MVC 3.0 如果 Asp.NET v4.0.30…

python 爬虫 包_Python爬虫包BeautifulSoup实例(三)

一步一步构建一个爬虫实例&#xff0c;抓取糗事百科的段子先不用beautifulsoup包来进行解析第一步&#xff0c;访问网址并抓取源码# -*- coding: utf-8 -*-# Author: HaonanWu# Date: 2016-12-22 16:16:08# Last Modified by: HaonanWu# Last Modified time: 2016-12-22 20:17:…

phpdesigner8 php7.0,大家千万别用PHPDesigner8 的项目替换,多说是泪,改整个站点中!

PHP PHPDesigner 项目 替换 乱码 大家千万别用PHPDesigner8 的项目替换,多说是泪,改整个站点中!整个项目中文全是乱码,部分文件UTF-8编码变成ANSI编码,不知道有没有大神教我怎么还原回复讨论(解决方案)没有用svn么&#xff1f;没有的话碰上这种问题真的是蛋痛.没有用svn么&…

python 日志不会按照日期分割_python实现日志按天分割

本文实例为大家分享了python实现日志按天分割的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下日志格式&#xff1a;1.1.1.1 - - [30/Apr/2015:00:34:55 0800] “POST /iDataService/services/MemRoomService HTTP/1.0” 200 405 “-” “Axis/1.4” “-”1.1.1.1 - …

如何分析网站日志文件

很多新手站长对于如何分析网站日志文件一筹莫展&#xff0c;打开.log日志文件看到的只有密密麻麻的数字和字母&#xff0c;细看能看出是什么含义&#xff0c;但是想要系统科学的去进行分析太耗时间&#xff0c;这时一般只能借助于第三方日志分析软件&#xff0c;而下面介绍一种…

不是有效的函数或过程名_过程和函数

VBA代码有两种组织形式&#xff0c;一种是过程&#xff0c;另一种就是函数。其实过程和函数有很多相同之处&#xff0c;除了使用的关键字不同之外&#xff0c;还有不同的是&#xff1a;函数有返回值&#xff0c;过程没有。函数可以在Access窗体&#xff0c;查询中像一般的Acces…

怎么下载php源文件,设计了一个php下载当前文件,却把php源文件下载下来了,为何?...

当我点a.txt下载后&#xff0c;打开txt文件&#xff0c;发现里面的内容不是a.txt本身的内容&#xff0c;而是该php文件中除了php代码的其他文本内容&#xff0c;这样该如何解决&#xff1f;资料下载回复讨论(解决方案)$file_name”a.txt”;$file_dir”./”;if(!file_exists($fi…

自己构造构造函数

/*** description 扩展function的原型* function* obj this的上下文*/if(!Function.prototype.bind){Function.prototype.bind function(obj){var slice [].slice,args slice.call(arguments,1),self this,nop function(){},bound function(){return self.apply(this ins…

浏览器快捷键_浏览器快捷键,让你事半功倍

随着互联网时代的发展&#xff0c;手机、电脑已经成为人们生活中不可或缺得一部分&#xff0c;无论是生活还是工作。尤其是办公室族&#xff0c;几乎每天都要面对电脑7/8个小时&#xff0c;查找各种信息或者浏览新闻&#xff0c;浏览器无可厚非的成为了装机必备的软件&#xff…

java f.lenth返回值,这个是什么意思,求仔细说明

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.io.File;import java.io.IOException;import java.util.Random;import java.util.Scanner;public class Test {boolean flagtrue;int count;String word;public static void main(String[] args) {Test t new Test();…

MySQL中的常用函数

1、 字符串函数 2、 字符串函数 模数和被模数任何一个为NULL结果都为NULL。 3、 日期和时间函数 4、 流程函数 5、其他常用函数 MySQL Administrator&#xff08;图形化管理工具&#xff09; MySQL Query Brower&#xff08;客户端查询工具&#xff09; phpMyAdmin&#xff08;…