c# – 将一串数字加密成一串字母数字

我有一串数字,我想缩短在URL中使用.此字符串始终仅由数字组成.例如:9587661771112

理论上,将数字字符串加密为字母数字(0-9a-zA-Z)字符串应始终返回更短的结果,这就是我想要的.

我创建了一个执行以下操作的算法:

Encrypt ( string1 = numeric input string, string2 = alphanumeric return string)

  • Takes the next two characters from string1 and converts them into a number, e.g 95 for the above example
  • Checks if the number is less than 52(the combined length of a-z and A-Z)
    • if so, adds (“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”)[Number] to
      string2 and jump forward by 2 characters
    • else, add (“0123456789)[First digit of Number) to string2 and jump forward by 1 character

在下一步中,数字将是58,依此类推.

通过一些调整,我可以获得的最短结果是:9587661771112> j9UQpjva

我的问题是,使用这种技术,结果可能会有很大差异.我也觉得这对我的问题不是一个干净的解决方案.

所以我需要一种加密算法,将一串数字转换成一个较短的大写字母,小写字母和数字串.它必须是可解密的,并且具有或多或少的一致结果.

知道怎么做到这一点?

解:

string Chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

string Base10To62(long N)
{
    string R = "";
    while (N != 0)
    {
        R += Chars[(int)(N % 62)];
        N /= 62;
    }
    return R;
}

long Base62To10(string N)
{
    long R = 0;
    int L = N.Length;
    for (int i = 0; i < L; i++)
    {
        R += Chars.IndexOf(N[i]) * (long)Math.Pow(62, i);
    }
    return R;
}

奇迹般有效 :)

解决方法:

解:

string Chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    private static string Base10To62(string S) 
    {
        string R = "";
        var N = long.Parse(S);
        do { R += Chars[(int)(N % 0x3E)]; } while ((N /= 0x3E) != 0);
        return R;
    }

    private static string Base62To10(string S) 
    {
        long R = 0;
        int L = S.Length;
        for (int i = 0; i < L; i++) R += Chars.IndexOf(S[i]) * (long)(System.Math.Pow(0x3E, i));
        return R.ToString();
    }
上一篇:javascript使用数值数组作为关联数组


下一篇:如何在Java和PostgreSQL中处理32位数字?