Cryptage de chaîne simple dans .NET et Javascript

Je développe une application ASP.NET MVC dans laquelle je souhaite chiffrer une chaîne courte sur le serveur, en utilisant C # et l'envoyer au client.

Ensuite, sur le côté client, il sera déchiffré via le code Javascript.

Des idées sur la façon de mettre en œuvre cela?

Connaissez-vous un algorithme de cryptage simple (ne doit pas être sécurisé à l'épreuve des balises) qui peut être facilement traduit de C # vers Javascript ou vice versa?

REMARQUE: Je pourrais le faire entièrement en C # et faire le décryptage via Ajax, mais je préférerais ne pas le faire de cette façon, car je veux réduire le trafic du site Web autant que possible.

The System.Security.Cryptography dispose d'un tas d'algorithmes de chiffrement symétriques (et asymétriques) prêts à utiliser. (Pour une utilisation super sûre aes )

Vous devriez être en mesure de trouver la mise en œuvre JavaScript correspondante pour la plupart (voici quelques implémentations aes dans JS)

Remarque: Si vous prévoyez d'utiliser un cryptage basé sur une clé privée, gardez à l'esprit que votre page Web va avoir la clé intégrée et cela signifie que tout devient peu utile parce que toute personne ayant accès à la page peut effectuer le décryptage , Au mieux, vous rendriez la vie des scrapers d'écran un peu plus difficile. Si vous réduisez la vie des scrapers d'écran, c'est votre objectif, vous pouvez simplement utiliser un algorithme d'obstruction. Toute mise en œuvre triviale rendrait très peu pratique pour les scrapers d'écran qui n'ont pas de moteur javascript:

Par exemple.

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

Ensuite, onload remplit vos champs de messagerie avec la sortie de ces fonctions.

Le cryptage Javascript a un cas d'utilisation vraiment bon pour un logiciel qui stocke des mots de passe pour les utilisateurs ala clipperz

Qu'en est-il d'un simple XOR Cipher ?

Ces deux implémentations sont entièrement compatibles:

  • Cryo XOR simple (C #)
  • Cryptage XOR de JavaScript

Il semble que vous voulez une obscurcissement ou un encodage, et non un cryptage. L'encodage Base64 devrait bien fonctionner ici. Le résultat ne ressemblera plus à une adresse e-mail, et le processus d'encodage est rapide.

En C #, vous pouvez utiliser:

 string emailAddress = "[email protected]"; string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(emailAddress)); 

Et vous pouvez utiliser cette fonction JavaScript pour décoder:

 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; } 

L'application C # encode la chaîne [email protected] dans YWJjQGV4YW1wbGUuY29t , et la version JavaScript YWJjQGV4YW1wbGUuY29t nouveau dans [email protected] .

En ce qui concerne la chose la plus simple qui pourrait fonctionner, il semble que vous voulez une forme simple d'obscurcissement, plutôt que tout ce qui est vraiment sécurisé.

Rot-13 pourrait être suffisant, à condition que vous rencontriez un public avec des adresses e-mail ASCII. Si vous devez prendre en charge Unicode, vous pourriez avoir besoin d'un peu plus sophistiqué.

Pouvez-vous utiliser HTTPS pour chiffrer tout le trafic entre le client et le serveur? C'est probablement la méthode la plus sécurisée que vous trouverez.