0

私は AES を初めて使用しますが、いくつかのモード (ECB、CBC など) があり、モードごとに異なる初期化ベクトル要件、ブロック、およびエンコーディングが必要であることがわかりました。私は以下をデコードしようとしています

Xrb9YtT7cHUdpHYIvEWeJIAbkxWUtCNcjdzOMgyxJzU/vW9xHivdEDFKeszC93B6MMkhctR35e+YkmYI5ejMf5ofNxaiQcZbf3OBBsngfWUZxfvnrE2u1lD5+R6cn88vk4+mwEs3WoAht1CAkjr7P+fRIaCTckWLaF9ZAgo1/rvYA8EGDc+uXgWv9KvYpDDsCd1JStrD96IACN3DNuO28lVOsKrhcEWhDjAx+yh72wM=

php と (テキスト) キー "043j9fmd38jrr4dnej3FD11111111111" をモード CBC とすべてゼロの IV で使用します。このツールで動作させることはできますが、php で行うことはできません。私が使用しているコードは次のとおりです。

function decrypt_data($data, $iv, $key) {
    $data   = base64_decode($data);
    $cypher = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');

    // initialize encryption handle
    if (mcrypt_generic_init($cypher, $key, $iv) != -1) {
            // decrypt
            $decrypted = mdecrypt_generic($cypher, $data);

            // clean up
            mcrypt_generic_deinit($cypher);
            mcrypt_module_close($cypher);

            return $decrypted;
    }

    return false;
} 

ベース 64 エンコーディングに関連する何かが欠けているか、最初にキーをバイナリに変換している可能性があると思います。私は多くのものを解読しようとしましたが、私が作成できるのは意味不明なものだけです. どんな助けでも大歓迎です。

4

1 に答える 1

3

ツール自体は、それがどのように暗号化されているかを正確に述べていません。また、IV を設定することもできないため、パラメーターを正しく設定するのは困難です (パラメーターが等しくなければならないため)。

いくつかの推測の結果、次のことがわかりました。

  • IV は暗号文の先頭に追加されます
  • 暗号文は aes-128-cbc で暗号化されています

したがって、コードを変更する必要があります。

function decrypt_data($data, $iv, $key) {
    $cypher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

    if(is_null($iv)) {
        $ivlen = mcrypt_enc_get_iv_size($cypher);
        $iv = substr($data, 0, $ivlen);
        $data = substr($data, $ivlen);
    }

    // initialize encryption handle
    if (mcrypt_generic_init($cypher, $key, $iv) != -1) {
            // decrypt
            $decrypted = mdecrypt_generic($cypher, $data);

            // clean up
            mcrypt_generic_deinit($cypher);
            mcrypt_module_close($cypher);

            return $decrypted;
    }

    return false;
}

$ctext = "Xrb9YtT7cHUdpHYIvEWeJIAbkxWUtCNcjdzOMgyxJzU/vW9x" .
         "HivdEDFKeszC93B6MMkhctR35e+YkmYI5ejMf5ofNxaiQcZb" .
         "f3OBBsngfWUZxfvnrE2u1lD5+R6cn88vk4+mwEs3WoAht1CA" .
         "kjr7P+fRIaCTckWLaF9ZAgo1/rvYA8EGDc+uXgWv9KvYpDDs" .
         "Cd1JStrD96IACN3DNuO28lVOsKrhcEWhDjAx+yh72wM=";

$key = "043j9fmd38jrr4dnej3FD11111111111";

$res = decrypt_data(base64_decode($ctext), null, $key);

キーの長さが aes-256-cbc で暗号化するために使用されない理由がわかりません - そのas3crypto-libraryのソースをチェックアウトしましたが、それをサポートしていましたが、実際にデバッグする必要がありますそれを確認します。

于 2012-04-05T05:43:57.113 に答える