Шифрование в C # и дешифрование во Flex - PullRequest
3 голосов
/ 03 апреля 2012

Мне нужно расшифровать некоторые данные во Flex, которые зашифрованы в C # и записаны в файл.Для простоты я остановился на blowfish, используя библиотеку as3crypto As3 и библиотеку Bruce Schneier C #.

AS3 as3crypto link

Bruce Schneier C # blowfish link

Я могу получить короткую строку для шифрования в C # и расшифровки в Flex Fine, однако более длинные строки просто не дают результатов, и я не знаю, что мне не хватает?

C #:

string reportstring = "watson?";
BlowFish b = new BlowFish("04B915BA43FEB5B6");
string cipherText = b.Encrypt_ECB(reportstring);
String plainText = b.Decrypt_ECB(cipherText);

AS3:

var txt:String =  "watson?";
var key:ByteArray = Hex.toArray("04B915BA43FEB5B6");
var blowfish:BlowFishKey = new BlowFishKey(key);                
var dataBytes:ByteArray = new ByteArray();
dataBytes=Hex.toArray(Hex.fromString(txt));
blowfish.encrypt(dataBytes);
blowfish.decrypt(dataBytes);

Обновление, некоторые образцы

работает

шифровать строку = "Ватсон? "

C # производит: 1514ea36fecfd5f5

AS3 производит: 1514ea36fecfd5f5

не работает

зашифрованная строка = "как дела, Уотсон?"

C # производит: 3ea9808a4b9f74aaa8e54fe682947673

AS3 производит: 3ea9808a4b9f74aa20776174736f6e3f

, что очень похоже, но не соответствует

, если я дешифрую шифр AS3 в C # I get:

как дела? `r ???

если я расшифрую C # шифр в AS3, я получу:

как делаOåO 悔 vs

Ответы [ 3 ]

2 голосов
/ 04 апреля 2012

Код AS3 кажется неверным. Рабочий пример кода:

import com.hurlant.util.Hex;
import com.hurlant.util.Base64;
import com.hurlant.crypto.Crypto;
import flash.utils.ByteArray;
import com.hurlant.crypto.symmetric.IPad;
import com.hurlant.crypto.symmetric.ICipher;
import com.hurlant.crypto.symmetric.NullPad;
import com.hurlant.crypto.symmetric.BlowFishKey;

function encrypt($text:String, $cryptKey:ByteArray):String
{
    var iPad:IPad = new NullPad();
    var crypt = Crypto.getCipher('blowfish-ecb',$cryptKey,iPad);
    var cryptText:ByteArray = new ByteArray();
    cryptText.writeUTFBytes( $text );
    crypt.encrypt( cryptText );
    trace( Hex.fromArray( cryptText ) );
    return null;
}   

var txt:String =  "whats up watson?";
var key:ByteArray = Hex.toArray("04B915BA43FEB5B6");

encrypt(txt, key);
1 голос
/ 05 апреля 2012

Ответ на вопрос «как расшифровать строку после»:

var encodedtxt:String = Hex.fromArray(cryptText);
cryptText = Hex.toArray(encodedtxt);
crypt.decrypt(cryptText);
0 голосов
/ 16 апреля 2012
package
{   
    import com.hurlant.crypto.Crypto;
    import com.hurlant.crypto.prng.Random;
    import com.hurlant.crypto.symmetric.ICipher;
    import com.hurlant.util.Base64;
    import com.hurlant.util.Hex;

    import flash.utils.ByteArray;

    import mx.utils.Base64Decoder;
    import mx.utils.Base64Encoder;

    public class EncryptionManager
    {

        public function EncryptionManager()
        {
        }

        public function enCrypt(data:String, keyStr:String):String
        {
            var key:ByteArray;
            var fileBytes:ByteArray = Hex.toArray(Hex.fromString(data));
            key = Hex.toArray(Hex.fromString(keyStr));

            var aes:ICipher = Crypto.getCipher("blowfish-ecb", key, Crypto.getPad("pkcs5"));
            aes.encrypt(fileBytes);

            var enc:Base64Encoder = new Base64Encoder();
            enc.encodeBytes(fileBytes);
            var result:String = enc.flush();
            return result;
        }

        public function deCrypt(data:String, keyStr:String):String
        {
            var key:ByteArray;

            var dec:Base64Decoder = new Base64Decoder();
            dec.decode(data);

            var fileBytes:ByteArray = dec.toByteArray();
            key = Hex.toArray(Hex.fromString(keyStr));
            var aes:ICipher = Crypto.getCipher("blowfish-ecb", key, Crypto.getPad("pkcs5"));
            aes.decrypt(fileBytes);
            return fileBytes.toString();
        }

    }
}

Попробуйте этот класс, который может решить вашу проблему.

...