我正在尝试在 Action Script 和 C# 之间共享加密
我的任务是在 C# 中解密以下消息
f1ca22a365ba54c005c3eb599d84b19c354d26dcf475ab4be775b991ac97884791017b12471000def05bb77bfe9c3a97d44ef78c9449f12daf6e25b61ab1a281
它使用Rijndael加密,ECB模式(电子密码本),Ke:Pas5pr@se,128位密钥大小和块大小。
我的问题是我似乎无法做到这一点,有人可以帮助我吗?
这是 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;
}
}
}
}
Update
我刚刚在您的输入中注意到的一件事是您的加密密钥只有 9 个字符,而我上面的代码需要 16 个字符的密钥。我不确定这是否是 Rijndael 加密算法的硬性要求,但上述代码不适用于不完全是 16 个字符的加密密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)