C#,整数转为短字符串(Short string)的加解密算法与源代码
2023-09-11 14:15:49 时间
网站生成的动态 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
源程序:
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
相关文章
- C# 正则表达式大全
- C#数据结构与算法揭秘19
- C#数据结构与算法揭秘18
- C#数据结构与算法揭秘八
- C#数据结构与算法揭秘七
- C#数据结构与算法揭秘五
- 《C#高级编程》学习笔记----c#内存管理--栈VS堆
- C#基础视频教程4.2 如何编写简单的计算器
- C#中使用SHA1算法对密码进行加密
- C# Winform 学习(四)
- C#泛型委托Predicate、Action、Func
- webBrowser捕获Alert内容(C#)
- 重新整理数据结构与算法(c#)——算法套路k克鲁斯算法[三十]
- 重新整理数据结构与算法(c#)—— 算法套路二分法[二十四]
- 重新整理数据结构与算法(c#系列)—— 树的前中后序遍历[十六]
- C#进阶系列——WebApi 异常处理解决方案
- C# 关于XML遍历新增节点,修改属性小例
- C# 中的"yield"使用
- C#获取外网IP、本机MAC地址及Ping的实现
- C#开发的OpenRA的游戏主界面怎么样创建3
- C#开发的OpenRA的只读字典IReadOnlyDictionary实现
- 使用C#对MongoDB中的数据进行查询,改动等操作
- C#之十大排序算法
- C#使用ML.Net完成人工智能预测
- EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
- C#常用的算法