2010-10-29 2 views
3

Je veux générer un lienExiste-t-il une méthode de "ligne unique" pour générer une chaîne cryptée?

http://site/?code=xxxxxxxxxx 

xxxxxxxxxx est une chaîne cryptée produite à partir de la chaîne user01. Et je devrai le reconvertir plus tard.

Existe-t-il un moyen simple de chiffrer et de déchiffrer une chaîne comme celle-ci?

+0

Que voulez-vous Meann par encodée/crypté? À quel point voulez-vous que ce soit sécurisé? –

+0

Oui, il y a plusieurs façons "simples" mais qu'as-tu essayé jusqu'ici? Quelles sont vos pensées et surtout ce qui est actuellement le problème? –

+0

@Paul: Cela n'a pas vraiment d'importance. Juste un peu difficile à "deviner" un code. – BrunoLM

Répondre

6

vous pouvez essayer ceci pour convertir votre chaîne. Il va se convertir en Base64 et ensuite en hexadécimal vous permettant de mettre l'URL.

var inputString = "xxxxx"; 
var code = Convert.ToBase64String((new ASCIIEncoding()).GetBytes(inputString)).ToCharArray().Select(x => String.Format("{0:X}", (int)x)).Aggregate(new StringBuilder(), (x, y) => x.Append(y)).ToString(); 

et ce pour obtenir la chaîne de retour, d'hexagone en Base64 et de Base64 à votre chaîne d'origine

var back = (new ASCIIEncoding()).GetString(Convert.FromBase64String(Enumerable.Range(0, code.Length/2).Select(i => code.Substring(i * 2, 2)).Select(x => (char)Convert.ToInt32(x, 16)).Aggregate(new StringBuilder(), (x, y) => x.Append(y)).ToString())); 
+2

Semble il n'y a pas un moyen plus facile. J'allais le faire si je ne pouvais pas trouver un autre moyen. Merci de l'avoir posté! – BrunoLM

+1

Ce n'est pas un chiffrement! Il est trivial d'abuser, de contourner ou de récupérer les données d'origine. – AviD

8

Ce que vous devez faire est de regarder dans l'espace de noms System.Security.Cryptography.

Éditer:
Dans une ligne de code? OK:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(Decrypt(Encrypt("This is a sample", "thisismypassword"), "thisismypassword")); 
    } 

    public static string Encrypt(string plaintext, string password) 
    { 
     return Convert.ToBase64String((new AesManaged { Key = Encoding.UTF8.GetBytes(password), Mode = CipherMode.ECB }).CreateEncryptor().TransformFinalBlock(Encoding.UTF8.GetBytes(plaintext), 0, Encoding.UTF8.GetBytes(plaintext).Length)); 
    } 

    public static string Decrypt(string ciphertext, string password) 
    { 
     return Encoding.UTF8.GetString((new AesManaged { Key = Encoding.UTF8.GetBytes(password), Mode = CipherMode.ECB }).CreateDecryptor().TransformFinalBlock(Convert.FromBase64String(ciphertext), 0, Convert.FromBase64String(ciphertext).Length)); 
    } 
} 
+0

La plupart d'entre eux génèrent des tableaux d'octets convertis en chaînes de caractères, ce qui n'est pas très joli à mettre dans une URL. Et je ne pouvais pas trouver un moyen simple de le faire. – BrunoLM

+0

Convertissez simplement l'octet du tableau en Base64. C'est l'approche habituelle. C'est une ligne de code. –

2
  • ROT13
  • ROT26
  • reverse-the-order-of-the-caractères
  • application/x-www-form-urlencoded
  • encode_hex (aes_256 (secret_key , known_iv, to_utf_8 (value)))
  • stockez la chaîne et une clé de recherche générée aléatoirement dans un dictionnaire persistant (comme une table de base de données avec des colonnes string et lookup_key)
Questions connexes