#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…