【发布时间】:2019-01-13 20:53:45
【问题描述】:
我需要在我的应用程序中实现 openSSL,因为我们必须将版本从 5.6 更改为 7.2
我想了解如何解决这个问题。
如果对我的环境或我如何使用应用程序产生任何疑问,请询问我会回复。
<?php
$dados = '#########################################################';
$key = '################################';
$iv = '################################';
/**
* running in version 7.2
*/
$data = openssl_decrypt($dados, 'AES-128-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
/**
* Erro:
* $ clear && ./php descriptografa-senha.php
*
* PHP Warning: openssl_decrypt(): IV passed is 32 bytes long which is longer than the 16 expected by selected cipher, truncating in ./descriptografa-senha.php on line 12
* PHP Stack trace:
* PHP 1. {main}() ./descriptografa-senha.php:0
* PHP 2. openssl_decrypt() ./descriptografa-senha.php:12
*
* Warning: openssl_decrypt(): IV passed is 32 bytes long which is longer than the 16 expected by selected cipher, truncating in ./descriptografa-senha.php on line 12
*
* Call Stack:
* 0.4121 125736 1. {main}() ./descriptografa-senha.php:0
* 0.4121 126312 2. openssl_decrypt() ./descriptografa-senha.php:12
*/
/**
* running in version 5.6
*/
$mcrypt_cipher = MCRYPT_RIJNDAEL_256;
$mcrypt_mode = MCRYPT_MODE_CBC;
$encrypted = $dados;
$iv_utf = mb_convert_encoding($iv, 'UTF-8');
$decrypted = mcrypt_decrypt($mcrypt_cipher, $key, base64_decode($encrypted), $mcrypt_mode, $iv_utf);
print_r($decrypted);
/**
* performed normally
*/
这是生成加密的代码,看看你是否能理解并帮助我解决问题,用于加密的语言是 C#,解密的语言是 PHP 7.2
public static string Cryptography(string text, string pass = "#############################")
{
if (string.IsNullOrEmpty(pass))
return string.Empty;
var rijndaelmanaged = new RijndaelManaged();
rijndaelmanaged.KeySize = 256;
rijndaelmanaged.BlockSize = 256;
rijndaelmanaged.Padding = PaddingMode.PKCS7;
rijndaelmanaged.Key = Convert.FromBase64String(Base64Encode(pass));
rijndaelmanaged.IV = Convert.FromBase64String(Base64Encode(vetorInicializacao));
var encrypt = rijndaelmanaged.CreateEncryptor(rijndaelmanaged.Key, rijndaelmanaged.IV);
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
byte[] xXml = Encoding.UTF8.GetBytes(text);
cs.Write(xXml, 0, xXml.Length);
}
xBuff = ms.ToArray();
}
String out = Convert.ToBase64String(xBuff);
return out;
}
【问题讨论】:
-
mcrypt 在 PHP7 中仍然可用,通过 PECL:pecl.php.net/package/mcrypt。
-
奇怪,因为在文档本身中它已在 7.2 版中被删除 [php.net]php.net/manual/en/function.mcrypt-decrypt.php
-
DimeCadmium,兄弟留在了cmets帮大佬们帮忙,我怎么用这个,比如我有两个linux和windows环境,可以显示怎么生成dll等等
-
我在这里查看并在 github 上有一个库,这将是理想的吗?它的名字是phpseclib/mcrypt_compat。
标签: php openssl php-5.6 php-openssl php-7.2