2012-04-03 3 views
3

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

AS3 as3crypto link

Bruce Schneier C# blowfish link

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

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); 

Update, некоторые образцы

работает

зашифровать строку = «уа ЦОН?»

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

AS3 производит: "Что до Ватсон" 1514ea36fecfd5f5

не работает

шифрует строку =

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

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

, которая очень похожа, но не соответствует

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

whats up? `R ???

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

Что up¨åO 悔 против

+3

Можете ли вы привести пример, который дает правильный результат, и пример, который дает неверный вывод? –

ответ

2

Код 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); 
+0

Но как мне получить cryptText bytearray в строку и позже расшифровать строку? – kolaval

+0

@kolaval - Этот вопрос не имеет смысла. 'cryptText' - это массив байтов, который содержит зашифрованные данные. –

1

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

var encodedtxt:String = Hex.fromArray(cryptText); 
cryptText = Hex.toArray(encodedtxt); 
crypt.decrypt(cryptText); 
0
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(); 
     } 

    } 
} 

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

Смежные вопросы