在C#中加密并在Flex中解密

我需要在Flex中解密一些用C#加密并写入文件的数据。 为了简单起见,我使用as3crypto As3库和Bruce Schneier C#库确定了河豚。

AS3 as3crypto链接

Bruce Schneier C#河豚链接

我可以在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); 

更新,一些样本

工作的

加密字符串=“沃森?”

C#产生:1514ea36fecfd5f5

AS3产生:1514ea36fecfd5f5

不工作

加密字符串=“wats up watson?”

C#产生:3ea9808a4b9f74aaa8e54fe682947673

AS3生产:3ea9808a4b9f74aa20776174736f6e3f

这是非常相似但不匹配

如果我在C#中解密AS3密码,我得到:

怎么了?`r ???

如果我在AS3中解密C#密码,我得到:

是什么意思?

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

回答“我之后如何解密字符串”:

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

试试这个可以解决你问题的课程。