所以随着时间的推移,mcrypt将在PHP 7.2中使用。当然还有一个替代方案:openssl。
我发现很难从 mcrypt 切换到开放,使用 AES 256 CBC 并保留 IV。我对密码学有点陌生,所以我并不真正了解一切,但我了解基础知识。
假设我有下面的代码
function encrypt($masterPassword, $data)
{
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
$key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
return base64_encode($iv . $encrypted);
}
function decrypt($masterPassword, $base64)
{
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
$data = base64_decode($base64);
$iv = substr($data, 0, $ivSize);
$encrypted = substr($data, $ivSize, strlen($data));
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
return trim($decrypted);
}
如何“转换”此代码以使用开放sl而不是mcrypt?
不能转换,因为Rijndael-256不是AES-256,OpenSSL扩展不附带Rijndael-256支持。< br> AES-256是具有256位(32字节)密钥的Rijndael-128。
不幸的是,您必须重新加密所有数据。
编辑:此外,您当前使用的方案存在一些问题:
mb_substr()
)好消息是,OpenSSL将自动为您完成PKCS#5填充,但是您应该更进一步,使用像defuse/php-encryption这样的可靠加密库。
Angular 是使用 TypeScript 构建的,并且支持向 Angular 提供元信息的装饰器。 TypeScript 的装饰器会让语法感觉更加“自然”,尽管有可能使用 Angular 没有的功能。
问题内容: 因此,随着时间的推移,mcrypt将在PHP 7.2中使用。当然,还有一种选择:openssl。 我发现很难使用AES 256 CBC和保留IV从mcrypt切换到openssl。我对密码学有点陌生,所以我并不是真的一无所知,但我了解一些基础知识。 假设我有以下代码 我如何“转换”此代码以使用由mcrypt插入的openssl? 问题答案: 您无法进行转换,因为Rijndael-256
使用webpack还将简化程序员的Angular工作流程,因为使用Angular的最简单的方法是使用TypeScript或ES6,它们在当代浏览器中都无法工作。
移除标准库依赖 禁用标准库 项目默认是链接 Rust 标准库 std 的,它依赖于操作系统,因此我们需要显式通过 #![no_std] 将其禁用: os/src/main.rs //! # 全局属性 //! - `#![no_std]` //! 禁用标准库 #![no_std] fn main() { println!("Hello, rCore-Tutorial!"); }
本书大部分篇幅会用来关注MongoDB的核心功能。所以我们基本上使用的是MongoDB的外壳(shell)。shell在学习MongoDB还有管理数据库的时候很有用,不过您的实际代码还是会用相应的语言来驱动mongoDB的。 这也引出了关于MongoDB您首先需要了解的东西:它的驱动。MongoDB有许多针对不同语言的官方驱动。可以认为这些驱动和您所熟知的各种数据库驱动是一样的。基于这些驱动,Mo
先去准备,下载,安装几个东西。 命令行 使用 Vagrant,几乎都是在命令行下进行的,所以你需要先准备一个命令行界面。Windows 用户我推荐使用完整版的 cmder,macOS 用户可以使用系统自带的终端(Terminal)。 Windows 下载 cmder: https://github.com/cmderdev/cmder 虚拟机 选择一款虚拟机软件,Virtualbox,VMWare