在mcrypt上使用谜题

问题描述 投票:0回答:1

因此,我的目标是演示在线版的Enigma机器。我正在使用PHP来执行此操作,并使用mcrypt,因为这似乎是使用enigma算法而不自行编写的唯一方法。问题是目前没有关于如何设置mcrypt的谜团的信息。我也在使用流,因为在任何人要求之前,似乎没有其他方法起作用。对于这个问题,我真的非常感谢。

这是我当前的设置。

$td = mcrypt_module_open('enigma', '', 'stream', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('very secret key'), 0, $ks);
mcrypt_generic_init($td, $key, $iv);
$encrypted = mcrypt_generic($td, 'This is very important data');
mcrypt_generic_deinit($td);
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $encrypted);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
echo trim($decrypted) . "\n";

如何获取它的加密方式,然后以密文和普通文本形式显示?

php encryption mcrypt
1个回答
0
投票

运行代码时,我收到此警告:

Warning: mcrypt_create_iv(): Cannot create an IV with a size of less than 1 or greater than 2147483647

发生错误是因为

mcrypt_enc_get_iv_size($td)

给出的值为'0':

$ivSize = mcrypt_enc_get_iv_size($td);
echo "ivSize: " . $ivSize;
ivSize: 0

解决方案是使用空白IV:

$iv = "";

并且一切都按预期工作:

echo trim($decrypted) . "\n";
This is very important data
© www.soinside.com 2019 - 2024. All rights reserved.