Как зашифровать / расшифровать URL в C # - PullRequest
3 голосов
/ 03 июня 2010

У меня есть URL-адрес www.site-address / site-page / page1.aspx? Username = deepu & password = deepu как я могу изменить URL на www.site-адрес / сайт-страница / page1.aspx? Имя пользователя = 232322323232 & пароль = 2323232322323 т.е. я хочу зашифровать поля, которые я пропускаю через URL, помогите мне зашифровать и расшифровать URL в C # с помощью .net, теперь я использую response.redirect и передаю эти значения в виде строки запроса .... pls help ... .

Ответы [ 4 ]

7 голосов
/ 29 октября 2012

Это не будет работать так, как вы хотите, но да, шифрование возможно, как указано ниже

Страница шифрования:

string id1 = "id1";

Response.Redirect("decryptionPage.aspx?id1=" + HttpUtility.UrlEncode(Encrypt(id1)));

private string Encrypt(string stringToEncrypt)
{
        byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
        byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c };
        byte[] key = { };
        try
        {
            key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q");
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Convert.ToBase64String(ms.ToArray());
        }
        catch (Exception e)
        {
            return e.Message;
        }
}

Страница расшифровки:

string getId1 = Convert.ToString(Request.QueryString["id1"]);
var qs = Decrypt(HttpUtility.UrlDecode(getId1));
private string Decrypt(string EncryptedText)
{
        byte[] inputByteArray = new byte[EncryptedText.Length + 1];
        byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c };
        byte[] key = { };

        try
        {
            key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q");
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            inputByteArray = Convert.FromBase64String(EncryptedText);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, rgbIV), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            System.Text.Encoding encoding = System.Text.Encoding.UTF8;
            return encoding.GetString(ms.ToArray());
        }
        catch (Exception e)
        {
            return e.Message;
        }
}
5 голосов
/ 03 июня 2010

Ваш подход некорректен, и шифрование не поможет решить основную проблему. Если вы выходите из сети, вы редко (никогда не увидите) шаблон, подобный тому, который вы описываете, даже если он зашифрован.

Вместо этого вы должны как можно надежнее хранить учетные данные пользователя на сервере и передавать уникальный, недолговечный токен сеанса в строку запроса, которую вы можете использовать для поиска учетных данных.

Что касается безопасного хранения на сервере, как только вы получите пароль пользователя в первый раз, вы должны использовать односторонний хеш, такой как SHA256, с солью. Вы можете передавать это значение куда угодно, хранить его и проверять, сравнивать ли потенциальный пароль с хешем, который вы сохранили. Обращайтесь с паролем пользователя как с токсичными отходами - выбрасывайте его как можно быстрее. Вы хотите быть в бизнесе по хранению паролей примерно так же плохо, как и в бизнесе по хранению токсичных отходов.

(Ответ с моего айфона, будущие ссылки или если кто-то хочет помочь мне! :))

4 голосов
/ 03 июня 2010

Вы действительно хотите это сделать? Если вы беспокоитесь об именах пользователей и паролях, возможно, есть какая-то ценность в предоставляемой вами информации или функциях. Передавая параметры URL, вы оставляете несколько открытых поверхностей атаки (не в последнюю очередь для повторных атак, где каждый может выдать себя за ваших пользователей.

Что вы действительно пытаетесь сделать, и почему вы не можете использовать , что предусмотрено в ASP.NET ?

1 голос
/ 04 июня 2010

Почему вы не публикуете значения вместо использования строки запроса? С SSL по крайней мере никто не увидит пароль в зашифрованном виде или иначе. Дополнительные пароли в URL не обеспечивают никакой безопасности. Это все равно что разбрасывать ключи от вашего дома по всему району и надеяться, что никто не попробует их открыть ваш дом.

В основном это ошибочная предпосылка. URL-адреса кэшируются разными способами, поэтому имеет смысл не вводить в них пароли.

Однако вы не одиноки в установке паролей в URL. Проверьте это

http://support.microsoft.com/kb/135975

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...