【问题标题】:PHP generate symmetric key with AES, ECB mode block and PKCS5PaddingPHP 使用 AES、ECB 模式块和 PKCS5Padding 生成对称密钥
【发布时间】:2012-12-28 12:54:28
【问题描述】:

我需要在 ECB 模式块中使用标准 AES 和 PKCS5Padding 生成对称密钥,但我做不到。

在我的搜索过程中,我只找到了使用上述条件加密某些内容的函数。但我不想要这个;我想生成一个对称密钥。

我需要能够与网络服务通信,我需要这个,因为它是加密的一部分。

我查看了 phpseclib,但该库也不生成对称密钥。

【问题讨论】:

  • 是的,这是websersive实体的必需品

标签: php key aes ecb


【解决方案1】:

首先,要对需要即兴创作的输入进行 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);

【讨论】:

  • 杰克,我已经用过这个了,问题是我必须在对 web 服务的每个请求中生成不同的对称密钥,所以要加密的密钥(“这是一个非常秘密的密钥”)例如,可以是一个包含系统日期和用户名的字符串?
  • @RicardoMartins 嗯,它可以,但通常密钥是双方都知道的......所以如果你有一个特殊的算法来确保两个系统日期相同,那么是的,你可以这样做。
【解决方案2】:

在 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

【讨论】:

  • 但这有 PKCS5Padding 吗?
【解决方案3】:

您可以通过调用 phpseclib 库来执行此操作,该库可以调整为任何密码(AES、DES..)、加密模式、密钥长度和可选的 PBKDF2 派生。 请参见: http://phpseclib.sourceforge.net/crypt/examples.html

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 2020-02-24
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多