在.Net中加密并在AS3中解密

时间:2013-06-24 13:12:05

标签: asp.net actionscript-3 encryption encryption-symmetric as3crypto

我需要加密ASP.net中的一些文件,并在使用Action Script 3构建的Flash应用程序中解密它们。

AS3开发人员发现了一个名为AS3crypto的lib调用,对于AS3来说这似乎是一个很好的调用。这个想法是使用相同的密钥加密和解密。对称加密?

但我正在努力寻找使用相同算法进行加密的.Net等价物。

我在4guysfromrolla博客中尝试过RC4示例,对我来说效果太慢了。 我在这个例子(http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged(v=vs.100).aspx)上尝试过AES,它在.Net上工作得很好但我似乎无法使用AS3crypto解密来获取相同的文件。 AS3crypto似乎不喜欢IV进行解密。我只能提供一把钥匙。

到目前为止,我迷路了。如何加密.Net中的文件并在AS3中将其解密以获取相同的文件?

1 个答案:

答案 0 :(得分:0)

注意:对Key和IV使用16个字符长度,例如:密钥:1234567890123456和IV:9876543210654321

这是C#代码

    public byte[] Encrypt(byte[] someData, string KEY, string IV)
    {
        //preparing
        byte[] keyBytes = Encoding.UTF8.GetBytes(KEY); 
        byte[] ivBytes = Encoding.UTF8.GetBytes(IV); 


        //here goes encryption
        RijndaelManaged rijndaelManaged = new RijndaelManaged();
        rijndaelManaged.Key = keyBytes;
        rijndaelManaged.IV = ivBytes;
        rijndaelManaged.BlockSize = 128;
        rijndaelManaged.Mode = CipherMode.CBC;
        ICryptoTransform encryptor = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV);

        byte[] result = null;
        using (MemoryStream memoryStream = new MemoryStream())
        {
            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
            {
                cryptoStream.Write(someData, 0, someData.Length);
                cryptoStream.FlushFinalBlock();
                result = memoryStream.ToArray();
            }
        }

        return result;


    }

这是使用AS3Crypto库的AS3代码

    private function decrypt(input:ByteArray, decrKey:String, decrIV:String):ByteArray
    {

        var key:ByteArray = Hex.toArray(Hex.fromString(decrKey));
        var pad:IPad = new NullPad();
        var aes:ICipher = Crypto.getCipher("aes-cbc", key, pad);
        var ivmode:IVMode = aes as IVMode;
        ivmode.IV = Hex.toArray(Hex.fromString(decrIV));
        aes.decrypt(input);

        return input;
    }