Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / C++ -> PHP: как лучше? / 7 сообщений из 7, страница 1 из 1
01.08.2012, 10:43:01
    #37900012
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ -> PHP: как лучше?
есть функция на с++, которую мне надо бы вызвать в PHP коде.
Что посоветуете, как лучше сделать:

1. переписать на PHP - но там не так просто, хоть и строк всего меньше 100.
2. завернуть в виде какой-то либ, как?
3. вызвать приложение через system(), но мне надо передать строку в качестве аргумента и получить строку обратно
...
Рейтинг: 0 / 0
01.08.2012, 23:40:03
    #37901102
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ -> PHP: как лучше?
Winnipuh,

ИМХО третий вариант наиболее прост. Кроме system() есть еще exec() и обратный апостроф.
Однако, на шаред хостинге обычно блокируют все эти функции.
...
Рейтинг: 0 / 0
01.08.2012, 23:48:44
    #37901106
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ -> PHP: как лучше?
Как долго эта функция отрабатывает? Может таки проще переписать на php?
...
Рейтинг: 0 / 0
02.08.2012, 00:01:30
    #37901111
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ -> PHP: как лучше?
Edd.DragonКак долго эта функция отрабатывает? Может таки проще переписать на php?

да, наверное.... вот код, который надо бы портировать


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
// decrypt the request
        try
        {
                string cipher;
                string stemp((char*)request, strlen((char*)request));
                StringSource source(stemp.data(), true, new Base64Decoder(new
StringSink(cipher)));

                SecByteBlock key((const byte*)&keydat[0], 32);

                EAX< AES >::Decryption d;
                d.SetKeyWithIV( key, key.size(), (const byte*)cipher.data(), 12 );
                cipher.erase(0, 12);

                // Break the cipher text out into it's components: Encrypted Data
and MAC Value
                string enc = cipher.substr( 0, cipher.length()-TAG_SIZE );
                string mac = cipher.substr( cipher.length()-TAG_SIZE );

                // Sanity checks
                assert( cipher.size() == enc.size() + mac.size() );
                assert( TAG_SIZE == mac.size() );

                AuthenticatedDecryptionFilter df( d, NULL,
AuthenticatedDecryptionFilter::MAC_AT_BEGIN |
AuthenticatedDecryptionFilter::THROW_EXCEPTION, TAG_SIZE );

                // The order of the following calls are important
                df.ChannelPut( "", (const byte*)mac.data(), mac.size() );
                df.ChannelPut( "AAD", (const byte*)(char*)licenseID,
strlen((char*)licenseID));
                df.ChannelPut( "", (const byte*)enc.data(), enc.size() );

                // If the object throws, it will most likely occur during ChannelMessageEnd()
                df.ChannelMessageEnd( "AAD" );
                df.ChannelMessageEnd( "" );

                // If the object does not throw, here's the only opportunity to
check the data's integrity
                bool b = df.GetLastResult();
                assert( b );

                // Remove data from channel
                size_t n = (size_t)-1;

                // Plain text recovered from enc.data()
                df.SetRetrievalChannel( "" );
                n = (size_t)df.MaxRetrievable();
                retrieved.resize( n );

                if( n > 0 ) { df.Get( (byte*)retrieved.data(), n ); }
        }
        catch( CryptoPP::InvalidArgument& e )
        {
                hr = E_PGNPDECRYPTFAIL;
        }
        catch( CryptoPP::AuthenticatedSymmetricCipher::BadState& e )
        {
                // Pushing PDATA before ADATA results in: "GMC/AES: Update was
called before State_IVSet"
                hr = E_PGNPDECRYPTFAIL;
        }
        catch( CryptoPP::HashVerificationFilter::HashVerificationFailed& e )
        {
                hr = E_PGNPDECRYPTFAIL;
        }
...
Рейтинг: 0 / 0
02.08.2012, 00:12:26
    #37901117
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ -> PHP: как лучше?
Ну он то еще за собой тянет Crypto++.

Если бы не это, то я бы однозначно перенес на PHP.
...
Рейтинг: 0 / 0
02.08.2012, 00:16:32
    #37901122
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ -> PHP: как лучше?
Edd.DragonНу он то еще за собой тянет Crypto++.

Если бы не это, то я бы однозначно перенес на PHP.

ну так...
...
Рейтинг: 0 / 0
02.08.2012, 11:42:32
    #37901587
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ -> PHP: как лучше?
Edd.DragonНу он то еще за собой тянет Crypto++.

Если бы не это, то я бы однозначно перенес на PHP.

а кстати, такая замена не пройдет? (mcrypt-овые вызовы)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?php
$request = "XP/4lQ3gMwQyuNDwxo3gFn9NmsUlfqhr6aTLprg0FJ6a7utrnbzUnT/8fPI7b0bldbom94eK".
"FZsVzlGcPnqbMCuKSTrQGt9b60ZBciMtGO2hVioIp1Vb2U+t16UHqwXwFlPddC5DCNiiTg5W".
"XBugH3POuWypZvbd4";

$source = base64_decode($request);

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

$iv_size = mcrypt_enc_get_iv_size($cipher);
printf("iv_size = %d\n",$iv_size);
...
?>
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / C++ -> PHP: как лучше? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]