我需要在ECB模式块和PKCS5Padding中使用标准AES生成对称密钥,但我不能这样做。
在我的搜索过程中,我只发现了使用上述条件加密某些内容的函数。但我不想要这个;我想生成一个对称密钥。
我需要与网络服务进行通信,我需要这个,因为这是加密的一部分。
我查看了phpseclib,但该库也没有生成对称密钥。
答案 0 :(得分:5)
首先,要对你需要即兴创作的输入进行PKCS#5填充:
// source: http://php.net/manual/en/ref.mcrypt.php#69782
function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
然后选择您的算法并生成IV:
$alg = MCRYPT_RIJNDAEL_128; // AES
$mode = MCRYPT_MODE_ECB; // not recommended unless used with OTP
$iv_size = mcrypt_get_iv_size($alg, $mode);
$block_size = mcrypt_get_block_size($alg, $mode);
$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM); // pull from /dev/urandom
初始化加密密钥:
$key = "This is a very secret key";
将填充应用于输入并加密
$input = pkcs5_pad($input, $block_size);
$crypttext = mcrypt_encrypt($alg, $key, $input, $mode, $iv);
答案 1 :(得分:1)
在php中我使用它来创建对称密钥。
<?php
srand((double)microtime()*1000000 );
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CFB, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$key = substr(sha1('Your Secret Key Here'), 0, $ks);
mcrypt_generic_init($td, $key, $iv);
$ciphertext = mcrypt_generic($td, 'This is very important data');
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
print $iv . "\n";
print trim($ciphertext) . "\n";
?>
这将是一个很好的起点: http://php.net/manual/en/function.mcrypt-create-iv.php
答案 2 :(得分:0)
您可以通过调用phpseclib库来执行此操作,该库可以调整为任何密码(AES,DES ..),加密模式,密钥长度和可选的PBKDF2派生。 请参阅: http://phpseclib.sourceforge.net/crypt/examples.html