当前位置:   article > 正文

C#,整数转为短字符串(Short string)的加解密算法与源代码_c#加密与反解生成短字符

c#加密与反解生成短字符

1 整数转为短字符串的应用

网站生成的动态 URL 往往以内容序列号id为标识与参数,比如:

http://www.jerry.com/tom.aspx?id=1

使用 Web Rewrite,可以实现网页静态化,称为:

http://www.jerry.com/content/1.html

对于爬虫软件而言,这最好不过了。

即使中学生也可以从 id=1 爬到 id=10000 ,分分钟爬你个底掉。

对策之一,就是把 id  隐藏起来,转为“短字符串”就是技术之一。

http://www.jerry.com/content/9Rus3d.html

2 源程序

using System;   
using System.Text;   
using System.Collections;
using System.Collections.Generic;

/// <summary>
/// 整数转为“短字符串”
/// </summary>
public static class ShortHelper
{
    // 修改这个字符串,就可以生成与别人不同的结果!!!
    private static string cs = "m65pKkCes8VzxhGby9XNcfqPaWuE2jFYnUDT104LOdA3HIZoSvBigMwlrQ7JRt";
    private static Hashtable hash = new Hashtable();
    private static uint offset = (uint)cs.Length / 2;

    public static uint begin = 1020304050;

    public static string Encode(int v)
    {
        StringBuilder sb = new StringBuilder();
        uint va = (uint)v;
        va += begin;
        uint lastv = 0;
        while (va > 0)
        {
            uint vb = va % offset;
            va = (va - vb) / offset;
            if (sb.Length == 0) lastv = vb;
            sb.Append((sb.Length == 0) ? cs.Substring((int)vb, 1) : cs.Substring((int)(vb + lastv), 1));
        }
        return sb.ToString();
    }

    private static void Init()
    {
        for (int i = 0; i < cs.Length; i++)
        {
            hash.Add(cs.Substring(i, 1), i);
        }
    }

    public static int Decode(string s)
    {
        if (hash.Count == 0) Init();
        if (s.Length < 2) return 0;
        uint v = 0;
        uint lastv = 0;
        for (int i = 0; i < s.Length; i++)
        {
            if (i == 0) { v = (uint)((int)hash[s.Substring(i, 1)]); lastv = v; continue; }
            else { v += ((uint)((int)hash[s.Substring(i, 1)] - lastv)) * (uint)Math.Pow(offset, i); }
        }
        v -= begin;
        return (int)v;
    }
}
 

POWER BY TRUFFER.CN
BY 315SOFT.COM

3 代码格式

  1. using System;   
  2. using System.Text;   
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. /// <summary>
  6. /// 整数转为“短字符串”
  7. /// </summary>
  8. public static class ShortHelper
  9. {
  10.     // 修改这个字符串,就可以生成与别人不同的结果!!!
  11.     private static string cs = "m65pKkCes8VzxhGby9XNcfqPaWuE2jFYnUDT104LOdA3HIZoSvBigMwlrQ7JRt";
  12.     private static Hashtable hash = new Hashtable();
  13.     private static uint offset = (uint)cs.Length / 2;
  14.     public static uint begin = 1020304050;
  15.     public static string Encode(int v)
  16.     {
  17.         StringBuilder sb = new StringBuilder();
  18.         uint va = (uint)v;
  19.         va += begin;
  20.         uint lastv = 0;
  21.         while (va > 0)
  22.         {
  23.             uint vb = va % offset;
  24.             va = (va - vb) / offset;
  25.             if (sb.Length == 0) lastv = vb;
  26.             sb.Append((sb.Length == 0) ? cs.Substring((int)vb, 1) : cs.Substring((int)(vb + lastv), 1));
  27.         }
  28.         return sb.ToString();
  29.     }
  30.     private static void Init()
  31.     {
  32.         for (int i = 0; i < cs.Length; i++)
  33.         {
  34.             hash.Add(cs.Substring(i, 1), i);
  35.         }
  36.     }
  37.     public static int Decode(string s)
  38.     {
  39.         if (hash.Count == 0) Init();
  40.         if (s.Length < 2) return 0;
  41.         uint v = 0;
  42.         uint lastv = 0;
  43.         for (int i = 0; i < s.Length; i++)
  44.         {
  45.             if (i == 0) { v = (uint)((int)hash[s.Substring(i, 1)]); lastv = v; continue; }
  46.             else { v += ((uint)((int)hash[s.Substring(i, 1)] - lastv)) * (uint)Math.Pow(offset, i); }
  47.         }
  48.         v -= begin;
  49.         return (int)v;
  50.     }
  51. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/114826
推荐阅读
相关标签
  

闽ICP备14008679号