【问题标题】:Javascript - Decryption of a C# AES EncryptionJavascript - C# AES 加密的解密
【发布时间】: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


【解决方案1】:
//Generic Handler
public void ProcessRequest(HttpContext context)
{
string EncryptedString = context.Request.QueryString["encrypted"];
response.write(decryptedString(EncryptedString);
}


//javascript

$.get("MyHandler.ashx?encrypted=YourEncryptedString").done(function(response){
var DecryptedString = response
});

【讨论】:

  • 好的,但是当我在同一个站点上解密答案时,为什么要加密 Web 服务答案呢?啊,我理解对了吗,传输上的答案会被加密,在应用程序上接收后会自动解密吗?
  • 它不需要在同一个站点上,目的是仍然在 c# 中进行解密,然后将解密的字符串传输回请求者(客户端)是的,它将传输加密的。以我的示例您可以使用任何处理 HttpContext 的服务来获得解密的文本。
  • 好的,通用处理程序放在服务器上还是在应用程序中?顺序如何?应用程序从 Web 服务调用方法。网络服务加密答案。应用程序获取加密的答案。应用程序使用加密的答案调用通用处理程序并获取解密的答案。对吗?
  • 如果您的应用程序位于 asp.net/mvc 中,您将希望它在应用程序上,是的,这是正确的。
  • 不,没有 ASP.Net/MVC。我的应用程序是用 JavaScript (Apache Cordova) 编写的。所以我不知道如何包含通用处理程序。
猜你喜欢
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 2016-09-24
  • 2015-05-01
  • 2021-02-06
  • 2023-01-31
相关资源
最近更新 更多