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

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 代码格式

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;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/473430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Docker部署JDK镜像

构建镜像 我们将已经准备好的docker-demo.jar包以及Dockerfile拷贝到虚拟机的/root/demo目录&#xff1a; 然后&#xff0c;执行命令&#xff0c;构建镜像&#xff1a; # 直接指定Dockerfile目录 docker build -t docker-demo:1.0 /root/demo 查看镜像列表&#xff1a; # 查看…

AI专题:5G-A扬帆风正劲,踏AI增长新浪潮

今天分享的是AI系列深度研究报告&#xff1a;《AI专题&#xff1a;5G-A扬帆风正劲&#xff0c;踏AI增长新浪潮》。 &#xff08;报告出品方&#xff1a;开源证券&#xff09; 报告共计&#xff1a;22页 足立连接&#xff0c;拓展算力&#xff0c;双曲线稳步发力 中兴通讯拥…

数据库第五次实验

目录 1 创建数据表 2 创建多个用户 ​​​​​​​3 用户的授权 ​​​​​​​4 用户权限的回收 ​​​​​​​5 角色的创建与授权 ​​​​​​​6 回收角色的权利 ​​​​​​​7 审计的设置 1 创建数据表 SQL语句&#xff1a; use experimentfive; create table…

[UI5 常用控件] 09.IconTabBar,IconTabHeader,TabContainer

文章目录 前言1. IconTabBar1.1 简介1.2 基本结构1.3 用法1.3.1 颜色&#xff0c;拖放&#xff0c;溢出1.3.2 Icons Only , Inner Contents1.3.3 showAll,Count,key,IconTabSeparator 1.3.4 Only Text1.3.5 headerMode-Inline1.3.6 design,IconTabSeparator-icon1.3.7 DensityM…

【NI-DAQm入门】构建应用程序案例1

1.系统框图 2.应用框图 3. 代码结构 3.1 技巧1 使用模拟采样时钟作为编码器的时钟源•(而不是使用隐式) 同步模拟输入和编码 3.2 技巧2 为模拟输入和计数器输入采集样本 写入相同采样点至文件 对齐数据文件 3.3 技巧3 数字读写技巧

C++-手把手教你模拟实现string

1.string的成员变量 模拟实现string只需要三个成员变量&#xff0c;capacity&#xff0c;size&#xff0c;_str&#xff0c;也就是容量&#xff0c;数据大小&#xff0c;指向字符串的指针。 2.string的构造函数 2.1 使用字符串构造 使用字符串来构造一个string类的对象&…

【MySQL】多表关系的基本学习

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-3oES1ZdkKIklfKzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Ubuntu20.04 安装jekyll

首先使根据官方文档安装&#xff1a;Jekyll on Ubuntu | Jekyll • Simple, blog-aware, static sites 如果没有报错&#xff0c;就不用再继续看下去了。 我这边在执行gem install jekyll bundler时报错&#xff0c;所以安装了rvm&#xff0c;安装rvm可以参考这篇文章Ubuntu …

STM32固件库简介与使用指南

1. STM32官方标准固件库简介 STM32官方标准固件库是由STMicroelectronics&#xff08;ST&#xff09;提供的一套软件开发工具&#xff0c;旨在简化STM32微控制器的软件开发过程。该固件库提供了丰富的功能和模块&#xff0c;涵盖了STM32微控制器的各种外设&#xff0c;包括但不…

pytorch 实现线性回归(深度学习)

一 查看原始函数 初始化 %matplotlib inline import random import torch from d2l import torch as d2l 1.1 生成原始数据 def synthetic_data(w, b, num_examples):x torch.normal(0, 1, (num_examples, len(w)))y torch.matmul(x, w) bprint(x:, x)print(y:, y)y tor…

Midjourney绘图欣赏系列(四)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

数据结构~二叉树(基础知识)

上一篇博客我们对树有了初步了解与学习&#xff0c;这篇我将初步学习二叉树&#xff01;&#xff01;&#xff08;新年快乐&#xff01;&#xff09; 目录 二叉树 1、定义&#xff1a; 2、特点&#xff1a; 3、基本形态&#xff1a; 4、二叉树的种类&#xff1a; &…