4

ECB モード ブロックの標準 AES と PKCS5Padding を使用して対称キーを生成する必要がありますが、実行できません。

検索中に、上記のこの条件で何かを暗号化する関数しか見つかりませんでした。しかし、私はこれを望んでいません。対称鍵を生成したい。

Web サービスと通信できるようにする必要があり、暗号化の一部であるため、これが必要です。

私はphpseclibを見てきましたが、ライブラリも対称鍵を生成しません。

4

3 に答える 3

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);
于 2012-12-28T13:26:05.753 に答える
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

于 2012-12-28T13:14:35.710 に答える