Простое шифрование строк в .NET и Javascript - PullRequest
9 голосов
/ 14 апреля 2009

Я разрабатываю приложение ASP.NET MVC, в котором я хочу зашифровать короткую строку на сервере с помощью C # и отправить ее на клиентскую сторону.

Затем на стороне клиента он будет расшифрован с помощью кода Javascript.

Есть мысли о том, как это реализовать?

Знаете ли вы о простом алгоритме шифрования (он не должен быть пуленепробиваемым), который можно легко перевести с C # на Javascript или наоборот?

ПРИМЕЧАНИЕ. Я мог бы сделать это полностью на C # и выполнить расшифровку с помощью Ajax, но я бы предпочел не делать этого таким образом, так как я хочу максимально снизить трафик на сайт.

Ответы [ 6 ]

10 голосов
/ 14 апреля 2009

Звучит так, будто вы хотите запутывание или кодирование, а не шифрование. Base64 кодировка должна хорошо работать здесь. Результат не будет похож на адрес электронной почты, и процесс кодирования будет быстрым.

В C # вы можете использовать:

string emailAddress = "abc@example.com";
string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(emailAddress));

И вы можете использовать эту функцию JavaScript для ее декодирования:

function Base64Decode(encoded) {
   var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      enc1 = keyStr.indexOf(encoded.charAt(i++));
      enc2 = keyStr.indexOf(encoded.charAt(i++));
      enc3 = keyStr.indexOf(encoded.charAt(i++));
      enc4 = keyStr.indexOf(encoded.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < encoded.length);

   return output;
}

Приложение C # кодирует строку abc@example.com в YWJjQGV4YW1wbGUuY29t, а версия JavaScript будет декодировать YWJjQGV4YW1wbGUuY29t обратно в abc@example.com.

9 голосов
/ 14 апреля 2009

А как насчет простого XOR-шифра ?

Эти две реализации полностью совместимы:

6 голосов
/ 14 апреля 2009

System.Security.Cryptography имеет набор симметричных (и асимметричных) алгоритмов шифрования, готовых к использованию. (Для чего-то сверхбезопасного используйте aes )

Вы должны быть в состоянии найти подходящую реализацию Javascript для большинства (вот несколько реализаций aes в JS)

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

Например.

function samObsfucated()
{
    return("s" + "a" + "m" + "@" + "s" + "." + "com");
}

Затем при загрузке заполните поля электронной почты с выводом этих функций.

Javascript шифрование имеет действительно хороший пример использования программного обеспечения, которое хранит пароли для пользователей. Ala clipperz

2 голосов
/ 14 апреля 2009

С точки зрения самой простой вещи, которая могла бы сработать, кажется, что вы хотите простую форму запутывания, а не что-нибудь действительно безопасное.

Rot-13 может быть достаточно при условии, что вы имеете дело с аудиторией с адресами электронной почты ASCII. Если вам нужна поддержка Юникода, вам может понадобиться что-то более сложное.

0 голосов
/ 05 июня 2019

Очень простые функции,

function Encrypt(value) 
{
  var result="";
  for(i=0;i<value.length;i++)
  {
    if(i<value.length-1)
    {
        result+=value.charCodeAt(i)+10;
        result+="-";
    }
    else
    {
        result+=value.charCodeAt(i)+10;
    }
  }
  return result;
}
function Decrypt(value)
{
  var result="";
  var array = value.split("-");

  for(i=0;i<array.length;i++)
  {
    result+=String.fromCharCode(array[i]-10);
  }
  return result;
} 
0 голосов
/ 14 апреля 2009

Можно ли использовать HTTPS для шифрования всего трафика между клиентом и сервером? Это, вероятно, самый безопасный метод, который вы найдете.

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