是否有“单行”方式生成加密字符串?

时间:2010-10-29 16:01:45

标签: c# asp.net security encryption

我想生成一个链接

http://site/?code=xxxxxxxxxx

其中xxxxxxxxxx是从字符串user01生成的加密字符串。我需要稍后将其转换回来。

是否有一种简单的方法来加密和解密这样的字符串?

3 个答案:

答案 0 :(得分:8)

您需要做的是查看System.Security.Cryptography命名空间。

修改
在一行代码中? 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));
    }
}

答案 1 :(得分:6)

你可以试试这个来转换你的字符串。它将转换为Base64然后转换为十六进制,允许您放置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();

这样可以返回字符串,从十六进制到Base64和从Base64到原始字符串

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 :(得分:2)

  • ROT13
  • ROT26
  • 反向的顺序的最字符
  • 应用程序/ x-WWW窗体-urlencoded
  • encode_hex(aes_256(secret_key,known_iv,to_utf_8(value)))
  • 将字符串和随机生成的查找键存储在持久字典中(如带有列字符串和lookup_key的数据库表)