c# - 从 Action Script 到 C# 的 Rijndael 加密

标签 c# actionscript-3 encryption rijndael

我正在尝试在 Action Script 和 C# 之间共享加密

我的任务是在 C# 中解密以下消息

f1ca22a365ba54c005c3eb599d84b19c354d26dcf475ab4be775b991ac97884791017b12471000def05bb77bfe9c3a97d44ef78c9449f12daf6e25b61ab1a281

它使用Rijndael encyption,ECB模式(电子密码本), key :Pas5pr@se,128位 key 大小和 block 大小。

我的问题是我似乎做不到,有人能帮我吗?

最佳答案

这是我的一个网站目前正在使用的 Rijndael 加密的实现。看看这是否有效:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace CMS.Core.Domain
{
    /// <summary>
    /// Summary description for EncryptionManager
    /// </summary>
    public static class EncryptionManager
    {
        public static string EncryptRijndael(string value, string encryptionKey) {
            try {
                var key = Encoding.UTF8.GetBytes(encryptionKey); //must be 16 chars
                var rijndael = new RijndaelManaged {
                    BlockSize = 128,
                    IV = key,
                    KeySize = 128,
                    Key = key
                };

                var transform = rijndael.CreateEncryptor();
                using (var ms = new MemoryStream()) {
                    using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write)) {
                        byte[] buffer = Encoding.UTF8.GetBytes(value);

                        cs.Write(buffer, 0, buffer.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    ms.Close();
                    return Convert.ToBase64String(ms.ToArray());
                }
            }
            catch {
                return string.Empty;
            }
        }

        public static string DecryptRijndael(string value, string encryptionKey)
        {
            try
            {
                var key = Encoding.UTF8.GetBytes(encryptionKey); //must be 16 chars
                var rijndael = new RijndaelManaged
                                               {
                                                   BlockSize = 128,
                                                   IV = key,
                                                   KeySize = 128,
                                                   Key = key
                                               };

                var buffer = Convert.FromBase64String(value);
                var transform = rijndael.CreateDecryptor();
                string decrypted;
                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                    {
                        cs.Write(buffer, 0, buffer.Length);
                        cs.FlushFinalBlock();
                        decrypted = Encoding.UTF8.GetString(ms.ToArray());
                        cs.Close();
                    }
                    ms.Close();
                }

                return decrypted;
            }
            catch
            {
                return null;
            }
        }
    }
}

更新

我刚刚注意到您输入的一件事是您的加密 key 只有 9 个字符,而我上面的代码需要 16 个字符的 key 。我不确定这是否是 Rijndael 加密算法的硬性要求,但上面的代码不适用于不完全是 16 个字符的加密 key 。

关于c# - 从 Action Script 到 C# 的 Rijndael 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669231/

相关文章:

c# - 在 C# 中从 XLSX 中读取数据

asp.net - 如何将图像从 Flash 传递到 ASP.NET?

ssl - TLS 1.2 change-cipher-spec 的 "decrypt error",但正确读取 MAC

c# - 将文件发送到队列 RabbitMQ

c# - 处理 HTTP 429 错误的最佳方法

java - Flash Player 17.0.0.169 中 Red5 录制的流播放问题

ios - 如何让 Airplay 与加密的 HTTPS 流媒体一起工作?

mysql - 使用 MySQL 中的加密 blob 字段匹配一行中的所有关键字

c# - wp7 列表框元素点击 'sender' 对象唯一性

actionscript-3 - 在AS3中展开var args