我继承了一些C#代码,需要将它移植到PHP.这里是:
string key = "some key";
string strEncrypted = "some encrypted string";
byte[] hashedKey = new MD5CryptoServiceProvider().ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
byte[] strToDecrypt = Convert.FromBase64String(strEncrypted);
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = hashedKey;
tripleDES.Mode = CipherMode.ECB;
string strDecrypted = UTF8Encoding.UTF8.GetString(tripleDES.CreateDecryptor().TransformFinalBlock(strToDecrypt, 0, strToDecrypt.Length));
Run Code Online (Sandbox Code Playgroud)
我的PHP代码如下所示:
$key = 'some key';
$str_encrypted = 'some encrypted string';
$hashed_key = md5($key, TRUE);
$str_to_decrypt = base64_decode($str_encrypted);
// The IV isn't used for ECB, but it prevents a warning.
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_ECB), MCRYPT_RAND);
$str_decrypted = mcrypt_decrypt(MCRYPT_TRIPLEDES, $hashed_key, $str_to_decrypt, MCRYPT_MODE_ECB, $iv);
Run Code Online (Sandbox Code Playgroud)
但是这两个解密的值并不相同,我无法弄清楚原因.我在这里和其他地方已经阅读了很多类似的问题,但它们似乎都没有解释我遇到的问题. …
任何人都可以告诉任何可以在java中使用的库,如果使用mcrypt库在PHP中完成操作,则可以得到相同的结果.
我想实际使用AES加密Java中的字符串,并在PHP中解密它.Java Cipher会在PHP中通过mcrypt产生加密解密吗?
编辑:
在Web中找到了一些resin-3.1库.是真的吗?
我正在加密一些数据,并在系统之间的srcipt运行时间中获得截然不同的结果.
在win7机器上运行我的算法,加密在3-8千秒内完成.
linux上的相同代码(ubuntu11和debian6盒子)需要7到35个SECONDS.
这对我的需求来说并不是真的可以接受,并且想知道是否有任何善良的人可以放弃任何光明.
相关代码如下:
<?php
class MyEncryption
{
public function __construct( $keyData )
{
$this->_encryptInit( $keyData );
}
private function _encryptInit( $keyData )
{
$this->ch = mcrypt_module_open('rijndael-256', '', MCRYPT_MODE_ECB , '');
$vector = mcrypt_create_iv (mcrypt_enc_get_iv_size( $this->ch ), MCRYPT_DEV_RANDOM );
$keySize = mcrypt_enc_get_key_size( $this->ch );
$key = substr( hash('SHA512', $keyData . $keySize ), 0, $keySize );
mcrypt_generic_init( $this->ch, $key, $vector );
}
private function _encryptClose()
{
mcrypt_generic_deinit( $this->ch );
mcrypt_module_close( $this->ch );
}
public function encryptData( $data )
{
$safeData …Run Code Online (Sandbox Code Playgroud) 我有一个使用mcrypt_decrypt()函数的脚本,但是我收到以下错误
致命错误:调用未定义的函数mcrypt_decrypt()
我需要包含哪些模块/库才能使用此功能?还是有另一个原因我收到错误?
谢谢
我正在开发一个PHP应用程序来管理公司的订单.要查看URL当前的订单/orders/view/3502.
我不希望订单ID号出现在URL中,因此我使用CodeIgniter的加密库来加密URL中的ID.URL(加密后)看起来像/orders/view/AaffGdQQ.
我遇到的问题有时加密ID包含正斜杠或加号,在URL中无法正常工作.CodeIgniter基于斜杠读取URL,因此,如果加密的ID有斜杠,它将读取为2个变量,而不是一个.此外,加号会被解释为URL中的空格.
所以,我的问题是,如何加密ID并确保字符串不包含加号或斜杠?
编辑:我有一个想法,看看加密的ID是否包含斜杠或加号,如果是,则再次加密.出于某种原因,每次ID被加密时,它都是不同的,所以这会起作用.
我在PHP应用程序中工作,我们有一个特定的字符串,我们需要在存储到数据库之前加密.我可以在PHP中使用带有密钥和iv的mcrypt没有问题.目前我正在尝试使用blowfish因为我认为在ColdFusion中解密它会是最灵活的.我遇到的问题是看起来ColdFusion似乎不想使用密钥或iv加密.ColdFusion希望你使用generateSecretKey()并使用其他方法来创建iv.
我似乎无法做的是让两人沟通.我首先尝试在coldFusion中加密并使用它生成的密钥,然后在PHP中使用它,但结果并非如此.我知道我必须遗漏一些东西,但我无法确定它可能是什么.
<?php
$securedString = mcrypt_encrypt ('MCRYPT_BLOWFISH' , 'THISISMYKEYTHATISVERYLONG32CHARS' , "This is the string I need encrypted' , MCRYPT_MODE_CBC , '12345678');
echo base64_encode($securedString);
?>
Run Code Online (Sandbox Code Playgroud)
那么等效的ColdFusion解密调用会是什么样的呢?
顺便说一句:如果Blowfish不是理想的算法,只要ColdFusion和PHP都可以使用它并且它是安全的,请随意建议另一个.
谢谢,布鲁斯
我在我的新电脑上安装了laravel,我收到了这个错误:
ErrorException mcrypt_get_iv_size():模块初始化失败
我从旧电脑上复制了这个项目.安装并启用了mcrypt,其他不使用laravel的页面正在运行.我正在运行ubuntu 14.04
我创建了一个新的laravel项目(使用laravel new命令),当我尝试访问时,我得到:
"哎呀,看起来像出事了."
我打开日志,错误是:
production.ERROR:带有'mcrypt_get_iv_size()消息的异常'ErrorException':模块初始化失败
有任何想法吗?
将"Yosemite"更新为"El Capitan"后,我遇到了mcrypt扩展问题.
致命错误:在第68行的/Users/Pilipe/Sites/prestashop-test/classes/Rijndael.php中调用未定义的函数mcrypt_decrypt()
在我的php.ini中,我添加了这一行:
扩展= "/ USR /本地/地窖/ php56-mcrypt的/ 5.6.13/mcrypt.so"
当我启动此命令行时:
php -i | grep'mcrypt'
我有 :
已解析的其他.ini文件=> /usr/local/etc/php/5.6/conf.d/ext-mcrypt.ini已
注册的流过滤器=> zlib.,bzip2.,convert.iconv.,string.rot13,string.toupper,string.tolower,string.strip_tags,convert.消费,消遣,mcrypt.,mdecrypt.
PHP警告:未知:依赖系统的时区设置是不安全的.您需要使用date.timezone设置或date_default_timezone_set()函数.如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符.我们现在选择了时区'UTC',但请设置date.timezone以选择您的时区.在第0行的未知中
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value
PWD => /usr/local/Cellar/php56-mcrypt/5.6.13
_SERVER ["PWD"] => /usr/local/Cellar/php56-mcrypt/5.6.13
命令php -v:
PHP 5.6.13(cli)(建于2015年10月2日23:07:16)
版权所有(c)1997-2015 PHP Group
Zend Engine v2.6.0,版权所有(c)1998-2015 Zend Technologies
我安装了mcrypt:
brew安装php56-mcrypt
我这样做了:
brew链接php56-mcrypt
为什么mcrypt它无法正常工作?
先感谢您.
真诚的菲利普.
我刚刚升级了我的MAMP服务器以运行7.1.0.我现在在Laravel 4.2安装中出现此错误;
Function mcrypt_get_iv_size() is deprecated
Run Code Online (Sandbox Code Playgroud)
我试过改变
'cipher' => MCRYPT_RIJNDAEL_128,
Run Code Online (Sandbox Code Playgroud)
至
'cipher' => 'AES-256-CBC',
Run Code Online (Sandbox Code Playgroud)
但无济于事.
有谁知道如何在Laravel 4.2中解决这个问题?
如评论中所述,不重复.
由于mcrypt在PHP 7.1中已弃用,并且我在现有项目中使用mcrypt加密/解密了很多数据,因此如何将我的PHP代码从mcrypt迁移到OpenSSL?我有以下代码要加密:
$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'salt', 'source string', MCRYPT_MODE_ECB));
Run Code Online (Sandbox Code Playgroud)
解密代码为:
$source = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'salt', base64_decode('encoded string'), MCRYPT_MODE_ECB);
Run Code Online (Sandbox Code Playgroud)
openssl_在不进行编码数据转换的情况下,以上示例中应使用哪些函数来获得相同的结果?
还是唯一的方法是运行一个脚本,该脚本将使用mcrypt解密所有存储的加密数据并使用openssl进行编码?
谢谢
mcrypt ×10
php ×9
laravel ×2
c# ×1
codeigniter ×1
coldfusion ×1
coldfusion-8 ×1
cryptography ×1
encryption ×1
java ×1
laravel-4 ×1
linux ×1
php-7.1 ×1
php-openssl ×1