【发布时间】:2014-08-11 18:40:45
【问题描述】:
我想解密 JavaScript 中的文本。
我用 C# 加密文本。这是我用于加密的 C# 代码:
readonly byte[] _salt = new byte[] { 48,94,2,4,9,4,52,222,12,65 };
private string getEncryptedString(string text, string password)
{
string retCryptedString = null;
byte[] retCryptedByteArr = null;
retCryptedByteArr = encryptStringToBytes(text, createHash(password));
retCryptedString = Convert.ToBase64String(retCryptedByteArr);
return retCryptedString;
}
private Rfc2898DeriveBytes createHash(string password)
{
Rfc2898DeriveBytes hash = default(Rfc2898DeriveBytes);
hash = new Rfc2898DeriveBytes(password, _salt);
return hash;
}
private byte[] encryptStringToBytes(string Text, Rfc2898DeriveBytes hash)
{
RijndaelManaged encryption = new RijndaelManaged();
RijndaelManaged rijAlg = new RijndaelManaged();
byte[] encrypted = null;
ICryptoTransform encryptor;
if (Text == null || Text.Length <= 0)
{
throw new ArgumentNullException("No text");
}
rijAlg = (RijndaelManaged)Rijndael.Create();
rijAlg.Key = hash.GetBytes(encryption.KeySize / 8);
rijAlg.IV = hash.GetBytes(encryption.BlockSize / 8);
encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
using (MemoryStream ms_Encrypt = new MemoryStream())
{
using (CryptoStream cs_Encrypt = new CryptoStream(ms_Encrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter sw_Encrypt = new StreamWriter(cs_Encrypt))
{
sw_Encrypt.Write(Text);
}
encrypted = ms_Encrypt.ToArray();
}
}
return encrypted;
}
我尝试了很多库(例如 crypto-js)。但是我无法解密,因为我不知道如何生成密钥和iv。
当我生成 PBKDF2 密钥时,我无法将其添加到解密中。
【问题讨论】:
-
为什么要用javascript解密?您可以在通用处理程序中对其进行解密,然后将值返回给客户端。您不希望用户破解您的解密代码。
-
我在 C# 中有一个 web 服务。还有一个 Javascript 应用程序。当应用调用方法时,网络服务会加密答案,应用应解密并显示解密后的答案。
-
我已经提供了一个答案,这可能有助于代替通用处理程序,我相信您可以使用 Web 服务处理请求和响应。
标签: c# javascript encryption cryptography aes