ускоритель приложений titanium php mcrypt

#php #titanium #desktop #appcelerator #mcrypt

#php #titanium #Для рабочего стола #ускоритель приложений #mcrypt — шифрование #mcrypt

Вопрос:

я перепробовал много вещей, и у меня все еще возникают проблемы… я работаю с titanium appcelerator studio (новейшая версия) на ПК (win7), создавая настольные приложения с помощью php. все остальные мои тесты пока проходили отлично, но я столкнулся с проблемами при использовании функций mcrypt.

вот код, с которым я работаю:

 <html>
<head>
<title> crypto </title>
<style type="text/css">
*, html, body {
    margin: 0;
    padding: 0;
    border: 0;      
}
body {
    background: #000;
    color: #fff;
    font: normal 12pt Arial, Helvetica, San-serif;
}
.wrap {
    margin: 20px auto;
    width: 80%;
    border: 1px solid #ccc;
    background: #333;
}
.row {
    padding: 5px;
    border-bottom: 1px solid #666;
}
</style>
<script type="text/php">

function check($name) {
    $d = '<div class="row">';
    $e = '</div>';
    if(function_exists($name)) {
        return $d.$name.": found".$e;
    } else {
        return $d.$name.": not found".$e;
    }
}
function test1() {
    $key = "this is a secret key";
    $input = "Let us meet at 9 o'clock at the secret place.";
    $encrypted_data = mcrypt_cbc('tripledes', $key, $input, 'mcrypt_encrypt');    

    $d = '<div class="row">';
    $b = '<br/>';
    $e = '</div>';
    return $d."key:".$b.$key.$e.$d."clear     text:".$b.$input.$e.$d."encrypted:".$b.$encrypted_data.$e;
}
function test2() {
    $key = "this is a secret key";
    $input = "Let us meet at 9 o'clock at the secret place.";

    $td = mcrypt_module_open('tripledes', '', 'cbc', '');
    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), 'mcrypt_rand');//alt_mcrypt_create_iv(8));
    mcrypt_generic_init($td, $key, $iv);
    $encrypted_data = mcrypt_generic($td, $input);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    $d = '<div class="row">';
    $b = '<br/>';
    $e = '</div>';
    return $d."key:".$b.$key.$e.$d."clear     text:".$b.$input.$e.$d."encrypted:".$b.$encrypted_data.$e;
}
function alt_mcrypt_create_iv($size) {
    $iv = '';
    for($i = 0; $i < $size; $i  ) {
        $iv .= chr(rand(0,255));
    }
    return $iv;
}
</script>
<script language="JavaScript" type="text/javascript" src="lib/js/jq-min.js"></script>
    <script type="text/javascript">
    function ready() {
        $("#box").html(check("md5"));
        $("#box").append(check("sha1"));
        $("#box").append(check("xero")); // a fake function name for testing
        $("#box").append(check("mcrypt_encrypt"));
        $("#box").append(check("mcrypt_decrypt"));
        $("#box").append(check("mcrypt_cbc"));
        $("#box").append(check("mcrypt_cfb"));
        $("#box").append(check("mcrypt_ecb"));
        $("#box").append(check("mcrypt_ofb"));
        $("#box").append(check("mcrypt_generic"));
        $("#box").append(check("mcrypt_module_open"));
        $("#box").append(check("mcrypt_module_close"));
        $("#box").append(check("mcrypt_create_iv"));
        $("#box").append(check("mcrypt_generic_init"));
        $("#box").append(check("mcrypt_generic_deinit"));
        $("#box2").html(test1());
        $("#box3").html(test2());
    }   
</script>
</head>
<body>
<div id="box2" class="wrap">
    <input type="button" value="test" onclick="ready()" />
</div>
<div id="box3" class="wrap">
    amp;nbsp;
</div>
<div id="box" class="wrap">
    amp;nbsp;
</div>
</body>
</html>
  

в принципе, есть 3 div, затем вы нажимаете кнопку «Проверить» в серии
тесты запущены. сначала я вызываю function_exists много раз, чтобы проверить, работает ли
доступны функции mcrypt (они отображаются правильно). затем я
выполните функции test1 и test2, каждая из которых пытается создать простую строку
шифрование и возврат результатов. используется старый метод mcrypt_cbc
а другой, более новый, mcrypt_generic.

когда я запускаю приложение, кажется, что все выполняется нормально, например, я не вижу никакой ошибки в отладчике (хотя обработка ошибок php в Ti немного странная). но когда я возвращаю переменную $encrypted_data из функции ether, ничего не возвращается. если я удалю его из инструкции return, я получу все остальные переменные, но не ту часть, которую я хочу.

у других пользователей Ti есть какие-либо предложения для меня?

заранее благодарю.

Комментарии:

1. краткое замечание, в моем коде вы увидите: $encrypted_data = mcrypt_cbc('tripledes', $key, $input, 'mcrypt_encrypt'); в отличие от $encrypted_data = mcrypt_cbc(MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT); причина этого в том, что Ti, похоже, не может найти константы (например, имя шифрования), поэтому я использовал литералы. я не думаю, что это моя проблема, но я подумал, что должен упомянуть об этом, поскольку это была связанная проблема.

2.я узнал на другом форуме, что использовал неправильные значения для констант… и мне нужно сначала вычислить iv для теста 1 (я думал, что это было автоматически), они правильные, и я протестировал их на обычном php-сервере, и он там работает… $iv = mcrypt_create_iv (mcrypt_get_block_size('tripledes', 'cbc'), 0); $encrypted_data = mcrypt_cbc('tripledes', $key, $input, 0, $iv); но это все еще не работает в моем приложении Ti…