使用 C# 实现 URL 安全的 Base62 转码

Base62 编码与 Base64 编码类似,都用于数据内容编码。Base64 和 Base62 的目的在都在于将需要传输的内容进行编码,尤其是一些特殊字符(如不可见字符、传输时与协议头冲突的字符)。

与 Base64 不同的是,Base62 编码是由10个数字、26个大写英文字母和26个小写英文字母组成,不包含 Base64 中的符号:+,/和=。这让经过 Base62 编码的数据很适合在 URL 中进行传输。

微信的扫码登录规定了 state 只能使用 a-zA-Z0-9 的参数值,这种场景下使用 Base62 就很有效。

public static class Base62
{private const string DefaultCharacterSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";private const string InvertedCharacterSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";/// <summary>/// Encode a byte array with Base62/// </summary>/// <param name="original">Byte array</param>/// <param name="inverted">Use inverted character set</param>/// <returns>Base62 string</returns>public static string ToBase62(byte[] original, bool inverted = false){var characterSet = inverted ? InvertedCharacterSet : DefaultCharacterSet;var arr = Array.ConvertAll(original, t => (int)t);var converted = BaseConvert(arr, 256, 62);var builder = new StringBuilder();foreach (var t in converted){builder.Append(characterSet[t]);}return builder.ToString();}/// <summary>/// Decode a base62-encoded string/// </summary>/// <param name="base62">Base62 string</param>/// <param name="inverted">Use inverted character set</param>/// <returns>Byte array</returns>public static byte[] FromBase62(string base62, bool inverted = false){if (string.IsNullOrWhiteSpace(base62)){throw new ArgumentNullException(nameof(base62));}var characterSet = inverted ? InvertedCharacterSet : DefaultCharacterSet;var arr = Array.ConvertAll(base62.ToCharArray(), characterSet.IndexOf);var converted = BaseConvert(arr, 62, 256);return Array.ConvertAll(converted, Convert.ToByte);}private static int[] BaseConvert(int[] source, int sourceBase, int targetBase){var result = new List<int>();var leadingZeroCount = Math.Min(source.TakeWhile(x => x == 0).Count(), source.Length - 1);int count;while ((count = source.Length) > 0){var quotient = new List<int>();var remainder = 0;for (var i = 0; i != count; i++){var accumulator = source[i] + remainder * sourceBase;var digit = accumulator / targetBase;remainder = accumulator % targetBase;if (quotient.Count > 0 || digit > 0){quotient.Add(digit);}}result.Insert(0, remainder);source = quotient.ToArray();}result.InsertRange(0, Enumerable.Repeat(0, leadingZeroCount));return result.ToArray();}
}

将字节数组转换为 Base62 字符串

var guid = Guid.Parse("40943a11e5434d2f869d4e566e48c4f2");
Console.WriteLine(Base62.ToBase62(guid.ToByteArray()));

输出:

WVdhFoDbSqBBYSKzptnko

将 Base62 字符串转换为字节数组

var str = "WVdhFoDbSqBBYSKzptnko";
var bytes = Base62.FromBase62(str);
var guid = new Guid(bytes);
Console.WriteLine(guid.ToString("N"));

输出:

40943a11e5434d2f869d4e566e48c4f2

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

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

相关文章

易成新能加码光伏产业链 作价28.29亿收购赛维两子公司

易成新能11月17日晚公告称&#xff0c;拟通过向债权人发行股份及支付现金方式&#xff0c;合计作价28.29亿元&#xff0c;取得破产重整后江西赛维100%股权和新余赛维100%股权。 同时&#xff0c;公司拟向控股股东中国平煤神马集团等5名对象&#xff0c;募集配套资金不超过21亿元…

sql学习笔记---公用表达式(CTE)

http://www.cnblogs.com/kissdodog/archive/2013/06/24/3153012.html转载于:https://www.cnblogs.com/changrulin/p/5108917.html

python中匿名函数的作用_什么是Python中的匿名函数

匿名函数 lambda x , y : xy 1.匿名的目的就是要没有名字&#xff0c;给匿名函数赋给一个名字是没有意义的。 2.匿名函数的参数规则、作用域关系与有名函数是一样的。 3.匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值。 flambda x,n:x ** n print(f(2,3))…

IOS学习笔记二十NSSet和NSMutableSet

1、NSSet、NSMutableSet NSSet元素无序、不能重复 NSMutableSet元素无序、不能重复,有一些向集合中增加元素的功能、删除元素....... 2、测试Demo int main(int argc, char * argv[]) {autoreleasepool {NSSet *set [NSSet setWithObjects:"chenyu", "hello…

怎么快速了解自己的MySQL服务器?

From: http://www.cnblogs.com/benshan/archive/2013/01/09/2853097.html 1、查看数据库服务器状态&#xff1a;status Linux 下的MySQL服务器状态 该列表中主要包括MySQL的版本&#xff08;为version 5.1.61&#xff09;、运行平台&#xff08;debian-linux-gnu(i686)&#xf…

八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?

要了解七类网线如何使用&#xff1f;需要掌握这四个问题&#xff1a;1、什么是七类网线&#xff1f;2、七类网线与六类网线有什么区别&#xff1f;3、七类网线用什么水晶头&#xff1f;如何制作7类网线水晶头&#xff1f;4、7类网线的应用场景&#xff1f;带着这四个问题&#…

html 图片 保持长宽比,实现图片在页面中宽高一直保持16:9比例的方法

实现图片在页面中宽高一直保持16&#xff1a;9比例的方法发布时间&#xff1a;2020-08-31 14:25:10来源&#xff1a;亿速云阅读&#xff1a;133作者&#xff1a;小新小编给大家分享一下实现图片在页面中宽高一直保持16&#xff1a;9比例的方法&#xff0c;希望大家阅读完这篇文…

poj2632 累死了

题意&#xff1a; 给定A*B的格子&#xff0c;放入N个机器人&#xff0c;每个机器人初始位置及朝向给定。给定M条指令。指令类型有三种&#xff1a; 1、L&#xff1a;左转90 2、R&#xff1a;右转90 3、F&#xff1a;前进一格 问执行指令过程中机器人是否发生碰撞&am…

Ubuntu 16.04安装Chrome浏览器

一、先有一个hosts能访问Google 参考&#xff1a;http://www.cnblogs.com/EasonJim/p/5999060.html 二、安装方法有两种&#xff0c;如下所示&#xff1a; 1、下载deb包&#xff08;推荐&#xff09; #下载 wget https://dl.google.com/linux/direct/google-chrome-stable_curr…

代码生成器原理

整个架设思路分的4个部分&#xff1a;A&#xff1a;底层物理数据库层&#xff0c;主要是存储数据用的。B&#xff1a;数据库访问层&#xff0c;主要是为了写一套代码可以跑在多种数据库上。C&#xff1a;一些辅助工具、基础组件&#xff0c;是为了加强自动产生代码的功能、简化…

IOS学习笔记二十一(NSDictionary、NSMutableDictionary)

1、NSDictionary、NSMutableDictionary 可以理解为java里面的map,一个key对应一个value&#xff0c;key不可以重复 NSDictionary不可变&#xff0c;NSMutableDictionary可变 NSMutableDictionary比NSDictionary多了一些增加&#xff0c;删除&#xff0c;修改的函数 比如set…

【Blog.Core开源】将Program升级为.NET6.0版本

大家假期好&#xff0c;好久不见&#xff0c;之前忙于其他事情&#xff0c;公众号暂时搁置了一个月了&#xff0c;新的一年开始了&#xff0c;很多小伙伴开始催更了&#xff0c;粉丝的要求必须满足。2022年打算重点推广BCVP社区&#xff0c;所以还是希望有愿意投稿的小伙伴&…

python画两条曲线_查找在matplotlib中绘制的两条曲线之间的区域(在区域之间填充)...

我有两条曲线的x和y值列表&#xff0c;它们都有奇怪的形状&#xff0c;而且我没有任何函数。我需要做两件事&#xff1a;&#xff08;1&#xff09;绘制它并对曲线之间的区域进行着色&#xff0c;如下图所示&#xff1b;&#xff08;2&#xff09;找到曲线之间该着色区域的总面…

OXY OPENCART 商城自适应主题模板 ABC-0020-05

OXY OPENCART 商城自适应主题模板 ABC-0020-05OXY FEATURESLayoutFoundation Framework – the most advanced responsive front-end framework in the world.100% Fully Responsive – Solid Flexible Responsive Layout that scales from 320px to 1440px.You can disable re…

年月跨度_建筑结构丨国内跨度最大的张弦桁架工程——合肥滨湖国际会展中心二期首榀桁架滑移成功...

来源&#xff1a;中建科工 华中大区。2020年12月8日全国公建领域最大跨度的张弦桁架钢结构工程合肥滨湖国际会展中心二期首榀桁架滑移顺利完成合肥滨湖国际会展中心二期项目位于合肥市滨湖新区锦绣大道与广西路交口&#xff0c;该项目2#综合馆建筑面积约4.8万平方米&#xff0c…

IOS学习笔记之二十二(文件io)

1、NSData和NSMutableData和NSURL NSData和NSMutableData表示oc的数据缓冲区 作用: 1)、对数据读取NSData 2)、输出NSData的数据 NSURL可以读取网络数据 2、MSFileManager管理文件和目录 作用&#xff1a;创建文件、删除文件、复制文件、移动文件 3、NSFileHandle处理文件…

计算机网络的网络层功能在内完成,计算机网络习题及答案

第一章&#xff1a;1、市话网在数据传输期间&#xff0c;在源节点与目的节点之间有一条利用中间节点构成的物理连接线路。这种市话网采用技术。(B )A、报文交换B、电路交换C、分组交换D、数据交换2、一座大楼内的一个计算机网络系统&#xff0c;属于( B )A、PANB、LANC、MAND、…

冯巩经典语录

1、姑娘们啊&#xff01;哪有那麽多白马啊&#xff1f;找个驴凑合得了&#xff0c;别等到有一天驴都被抢没了&#xff0c;剩一堆骡子... 2、所谓美女&#xff0c;三分长相七分打扮、所谓气质&#xff0c;三分才气七分装蒜、所谓温柔&#xff0c;三分忍让七分压抑。 3、下辇子要…

IOS清理缓存的几种方法

IOS清理缓存的几种方法&#xff0c; - (long long) fileSizeAtPath:(NSString*) filePath{NSFileManager* manager [NSFileManager defaultManager];if ([manager fileExistsAtPath:filePath]){return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];}retur…

【C#/.NET】不用AutoMapper,我用啥呢?

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧。如需源码请后台留言源码;**[如果觉得对您有帮助&#xff0c;欢迎关注]TinyMapper简介本文来自社区群粉丝投稿TinyMapper是一个.NET平台下的一个轻量级对象映射工具&#xff0c;号称是.Net平台下最快的对…