2013-10-04 1 views
-2

нужна помощь для преобразования следующей функции в php. Кто-нибудь может мне помочь ?Преобразование функции Progress 4GL encrypt AES OFB 128 в PHP

OpenEdge Прогресс 4 GL

DEFINE VARIABLE cClearText  AS CHARACTER NO-UNDO. 
DEFINE VARIABLE rBinaryKey  AS RAW  NO-UNDO. 
DEFINE VARIABLE rEncryptedValue AS RAW  NO-UNDO. 
DEFINE VARIABLE cEncryptedText AS CHARACTER NO-UNDO. 

ASSIGN 
    cClearText = "This is the clear text string to be encrypted." 

    rBinaryKey = GENERATE-PBE-KEY("password") 

    SECURITY-POLICY:SYMMETRIC-ENCRYPTION-ALGORITHM = "AES_OFB_128" 
    SECURITY-POLICY:SYMMETRIC-ENCRYPTION-KEY = rBinaryKey 
    SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV = ? 
    rEncryptedValue = Encrypt (cClearText) 
    cEncryptedText = BASE64-ENCODE(rEncryptedValue) 
    . 
MESSAGE "Encrypted Message:" cEncryptedText 
    VIEW-AS ALERT-BOX INFO BUTTONS OK. 

В PHP

$key = "password"; 
$text = "This is the clear text string to be encrypted."; 
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
/*$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); */ 
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); 
echo $crypttext; 

, но не тот же результат ???

+1

Вопросы, требующие кода, должны показать попытку и дать объяснение относительно того, с какой проблемой вы столкнулись. Не могли бы вы изменить свой вопрос? Я проголосую, чтобы отменить, если вы это сделаете. – halfer

ответ

4

Это просто мое воображение или вы используете AES_OFB_128 в качестве алгоритма с кодом OpenEdge и RIJNDAEL_256 для кода PHP?

Мне кажется, что вы должны получить другой результат.

Не должны ли вы иметь одинаковый режим и размер ключа? (IOW AES_ECB_256 вместо AES_OFB_128 в коде OpenEdge.)

0

изменен на SECURITY-POLICY:SYMMETRIC-ENCRYPTION-ALGORITHM = "AES_CBC_128".

В PHP:

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC); 

Проблема заключается в том, что преобразование кодовой фразы в основе ключ шифрования пароля (PBE-KEY) через Прогресс не возвращает то же значение, что и в PHP.

4GL:

rawBinaryKey = GENERATE-PBE-KEY("pw"). 

Не возвращаются же на PHP:

$key = "pw"; 

мне нужно знать, как выполнить через PHP функции, возвращающей такое же значение, как «GENERATE-PBE-KEY («pw») « возвращается на Progress 4GL.

С уважением

+2

Документы (вы прочитали документы?), Скажем, что GENERATE-PBE-KEY «Создает ключ шифрования на основе пароля на основе стандарта PKCS # 5/RFC 2898 и возвращает ключ как значение RAW». - быстрый поиск в Google для получения «php rfc 2898»: http://php.net/manual/en/function.hash-hmac.php –