Javascript-C#AES加密的解密

Javascript-C#AES加密的解密,c#,javascript,encryption,cryptography,aes,C#,Javascript,Encryption,Cryptography,Aes,我想用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[] retCrypted

我想用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;
    }
readonly byte[]_salt=新字节[]{48,94,2,4,9,4,52222,12,65};
私有字符串getEncryptedString(字符串文本、字符串密码)
{
字符串retCryptedString=null;
字节[]retCryptedByteArr=null;
retCryptedByteArr=encryptStringToBytes(文本,createHash(密码));
retCryptedString=Convert.ToBase64String(retCryptedByteArr);
返回retCryptedString;
}
专用Rfc2898DeriveBytes createHash(字符串密码)
{
Rfc2898DeriveBytes哈希=默认值(Rfc2898DeriveBytes);
哈希=新的Rfc2898DeriveBytes(密码,_salt);
返回散列;
}
专用字节[]encryptStringToBytes(字符串文本,Rfc2898DeriveBytes哈希)
{
RijndaelManaged encryption=新的RijndaelManaged();
RijndaelManaged rijAlg=新的RijndaelManaged();
字节[]加密=空;
iCryptTransform加密机;

如果(Text==null | | Text.Length为什么要用javascript解密它?你可以用通用处理程序解密它,然后将值返回客户端。你不想让用户看到你的解密代码进行黑客攻击。我有一个C |格式的Web服务和一个javascript格式的应用程序。当应用程序调用一个方法时,Web服务会加密答案,应用程序应该rypt并显示解密的答案。我已经提供了一个答案,这可能会有帮助,而不是通用处理程序。我相信您可以使用web服务处理请求和响应。好的,但是当我在同一个站点上解密答案时,为什么我要加密web服务答案?啊,我理解得对吗,传输设备上的答案正确吗pted和在应用程序上接收自动解密后?它不需要在同一个站点上,目的是仍然使用c#进行解密,然后将解密的字符串传输回请求者(客户端)是的,它将传输加密的文本。在我的示例中,您可以使用任何处理HttpContext的服务获得解密文本。好的,通用处理程序位于服务器或应用程序中?序列如何?应用程序从Web服务调用一个方法。Web服务加密答案。应用程序获取加密的anwers。应用程序调用通用的handler使用加密的答案并获得解密的答案。对吗?如果你的应用程序是asp.net/mvc,你会希望它出现在应用程序上,是的,这是正确的。不,没有asp.net/mvc。我的应用程序是用JavaScript(Apache Cordova)编写的。所以我不知道如何包含通用处理程序。
//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
});