mcrypt blowfish php немного отличается по сравнению с java и .net

Вот пример кода с измененными значениями ключа и полезной нагрузкой:

$key = '/4rTInjwg/H/nA==';
$key = base64_decode($key);

$data = 'val=100|val=200|val=300|val=400|val=500|val=600|val=700|val=800|val=900|';
$data.= 'val2=100|val2=200|val2=300|val2=400|val2=500|val2=600|val2=700|val2=800|val2=900|';
$data.= 'val3=100|val3=200|val3=300|val3=400|val3=500|val3=600|val3=700|val3=800|val3=900|';
$data.= 'val4=100|val4=200|val4=300|val4=400|val4=500|val4=600|val4=700|val4=800|val4=900|';

$result = base64_encode(mcrypt_ecb(MCRYPT_BLOWFISH,$key, $data, MCRYPT_ENCRYPT));

Это прекрасно зашифровывает и дешифрует в PHP, но Java и .NET имеют разные значения, и, что еще хуже, я не могу расшифровать результаты из Java или .NET. Когда я пытаюсь расшифровать значения из Java, я получаю строку, которая начинается правильно, но заканчивается мусором на полпути. Я работаю в 5.3x в Windows XP на случай, если кто-нибудь задумался.

Несмотря на то, что я STFW, я заметил несколько потоков, в которых последние комментарии упоминают о том, что base64 портит результат из-за проблем с печатью, и мне интересно, происходит ли это потому, что результаты становятся такими близкими, первые 50 или около того символов совпадают то дела идут на @ # $ !.

Я также читал несколько статей о размере блока и заполнении, но никто не может согласиться с тем, каким должно быть заполнение. Мне действительно нужно знать, если Java дополняет текст, каков размер блока по умолчанию, какой будет панель? Увидеть ниже:

Java-разработчик делает:

    import org.apache.commons.codec.binary.Base64;
    import java.util.ResourceBundle;
    import com.sun.crypto.provider.SunJCE;

    ... snip ...

    StringBuffer ourTransferBuffer = new StringBuffer(s);
    byte abyte0[] = Base64.decodeBase64(encryptionKey);
    SunJCE sunjce = new SunJCE();
    Security.addProvider(sunjce);
    SecretKeySpec secretkeyspec = new SecretKeySpec(abyte0, "Blowfish");
    Cipher cipher = Cipher.getInstance("Blowfish");
    cipher.init(1, secretkeyspec);
    byte abyte1[] = cipher.doFinal(ourTransferBuffer.toString().getBytes());
    s = Base64.encodeBase64String(abyte1);
    return s;

    ... snip ...

Я уже потратил слишком много времени на это, у кого-нибудь есть идеи? Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос