如何将字符串转换为激活密钥(格式为xxxx-xxxx-xxxx-xxxx-xxxx)并从激活密钥

时间:2016-07-28 10:54:54

标签: c# .net string

我正在寻找一种从字符串格式xxxx-xxxx-xxxx-xxxx-xxxx创建字符串的方法,如果我有该字符串,我可以从C#中的字符串中提取原始字符串。我在google上搜索了我找到了一些解决方案,它将字符串转换为所需的格式,但是他们不会从输出中找回原始字符串。有没有办法实现它。

我在下面找到了MD5的样本,它以我想要的格式转换字符串,但我无法将其转换回orignal字符串。

private static string GetHash(string s)
{
    MD5 sec = new MD5CryptoServiceProvider();
    ASCIIEncoding enc = new ASCIIEncoding();
    byte[] bt = enc.GetBytes(s);

    return GetHexString(sec.ComputeHash(bt));
}

private static string GetHexString(byte[] bt)
{
    int tmp = (int)'A';
    string s = string.Empty;
    for (int i = 0; i < bt.Length; i++)
    {
        byte b = bt[i];
        int n, n1, n2;
        n = (int)b;
        n1 = n & 15;
        n2 = (n >> 4) & 15;
        if (n2 > 9)
        {
            tmp = 0;
            tmp = (n2 - 10 + (int)'A');
            s += ((char)(n2 - 10 + (int)'A')).ToString();
        }
        else
            s += n2.ToString();
        if (n1 > 9)
        {
            tmp = 0;
            tmp = (n1 - 10 + (int)'A');
            s += ((char)(n1 - 10 + (int)'A')).ToString();
        }
        else
            s += n1.ToString();
        if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-";
    }
    return s;
}

1 个答案:

答案 0 :(得分:0)

您应该使用某种加密方式,以便您可以再次解密原始字符串。 MD5是一个散列函数,这意味着在对字符串进行散列之后,没有(算法)函数可以将散列反转为原始字符串。

使用加密功能将明文加密为密文后,只要它是可逆函数,就可以按照您喜欢的任何格式格式化此加密字符串。所以,让我们说你的加密字符串是&#34; 123456789&#34;,你可以将其格式化为:&#34; 12 - 3456 - 6 - 789&#34;。

考虑到你知道在添加了一个分隔符的字符数之后,你可以简单地将这个密钥反转为密文并使用解密方法来获取原始字符串。

旁注:我认为你需要这个用于某种电子邮件验证。以更简单的方式执行此操作的一个好方法是使用salt从电子邮件(或任何您正在验证的)创建哈希,并将此字符串与电子邮件一起发送给用户。由于您已将激活密钥保存到数据库中,因此可以轻松地将密钥与相应的电子邮件地址相结合。