Как расшифровать Rijndael-256 в python, используемом в Quickbooks PHP API - PullRequest
0 голосов
/ 29 мая 2020

Исходный код библиотеки -> Источник - quickbooks- php

function encrypt($key, $plain, $salt = null)
    {
        echo $key;
    $plain = serialize(array( $plain, $salt ));

    $crypt = mcrypt_module_open('rijndael-256', '', 'ofb', '');

    if (false !== stripos(PHP_OS, 'win') and 
        version_compare(PHP_VERSION, '5.3.0')  == -1) 
    {
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($crypt), MCRYPT_RAND);    
    }
    else
    {
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($crypt), MCRYPT_DEV_URANDOM);
    }

    $ks = mcrypt_enc_get_key_size($crypt);

    $key = substr(md5($key), 0, $ks);
    echo strlen($key);
    mcrypt_generic_init($crypt, $key, $iv);
    $encrypted = base64_encode($iv . mcrypt_generic($crypt, $plain));
    mcrypt_generic_deinit($crypt);
    mcrypt_module_close($crypt);

    return $encrypted;
}

Я пытаюсь расшифровать его с помощью библиотек AES или rijndael, подобных этой - https://github.com/moeenz/rijndael

Я получаю ошибки для любого ключа или зашифрованного текста. Образец зашифрованного текста: «egIz4uEsWGJf5A653uKC + q3 + Drgw3C / jceZ + 96d00AZCP4 / eoVPjaLZFuRiGyGyhIBAxqIg2sZ0BT: оригинальный текст« STRINGHIBAxqIg2sZ0 » : "test_key"

один из python кодов, которые я пробовал:

from rijndael.cipher.crypt import new
from rijndael.cipher.blockcipher import MODE_OFB
from Crypto import Random
rjn = new(key, MODE_OFB, Random.new().read(32), 32)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "site-packages\rijndael\cipher\crypt.py", line 87, in new
    return python_Rijndael(key,mode,IV,counter,blocksize,segment_size)
  File "site-packages\rijndael\cipher\crypt.py", line 94, in __init__
    raise ValueError("Blocksize should be 16, 24 or 32")
ValueError: Blocksize should be 16, 24 or 32
...