powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / C++ -> PHP: как лучше?
7 сообщений из 7, страница 1 из 1
C++ -> PHP: как лучше?
    #37900012
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть функция на с++, которую мне надо бы вызвать в PHP коде.
Что посоветуете, как лучше сделать:

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

ИМХО третий вариант наиболее прост. Кроме system() есть еще exec() и обратный апостроф.
Однако, на шаред хостинге обычно блокируют все эти функции.
...
Рейтинг: 0 / 0
C++ -> PHP: как лучше?
    #37901106
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как долго эта функция отрабатывает? Может таки проще переписать на php?
...
Рейтинг: 0 / 0
C++ -> PHP: как лучше?
    #37901111
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
C++ -> PHP: как лучше?
    #37901117
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну он то еще за собой тянет Crypto++.

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

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

ну так...
...
Рейтинг: 0 / 0
C++ -> PHP: как лучше?
    #37901587
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / C++ -> PHP: как лучше?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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