如何通过 C# 生成安全的 Base64 URL 字符串?
咨询区
Vishvesh Phadnis:
在 C# 中如何实现对 URL 进行安全的 base64 编码,在 JAVA 中我可以使用 Codec
类库来实现此功能,我目前是这么实现的。
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
但上面这样做,会有 ==
字符,这样会被当作url参数处理的,请问是否有更好的方式处理。
回答区
Kevinoid:
如果你用的是 ASP.NET Core
,你可以使用 Microsoft.AspNetCore.WebUtilities.WebEncoders.Base64UrlEncode
类,参考如下代码:
const string StringToEncode = "He=llo+Wo/rld";var encodedStr = Base64UrlEncoder.Encode(StringToEncode);
var decodedStr = Base64UrlEncoder.Decode(encodedStr);if (decodedStr == StringToEncode)Console.WriteLine("It works!");
elseConsole.WriteLine("Dangit!");
如果你的程序非 ASP.NET Core
的话, 可以使用 WebEncoders
。
public static byte[] Base64UrlDecode(string input, int offset, char[] buffer, int bufferOffset, int count){if (input == null){throw new ArgumentNullException(nameof(input));}if (buffer == null){throw new ArgumentNullException(nameof(buffer));}ValidateParameters(input.Length, nameof(input), offset, count);if (bufferOffset < 0){throw new ArgumentOutOfRangeException(nameof(bufferOffset));}if (count == 0){return Array.Empty<byte>();}// Assumption: input is base64url encoded without padding and contains no whitespace.var paddingCharsToAdd = GetNumBase64PaddingCharsToAddForDecode(count);var arraySizeRequired = checked(count + paddingCharsToAdd);Debug.Assert(arraySizeRequired % 4 == 0, "Invariant: Array length must be a multiple of 4.");if (buffer.Length - bufferOffset < arraySizeRequired){throw new ArgumentException(string.Format(CultureInfo.CurrentCulture,EncoderResources.WebEncoders_InvalidCountOffsetOrLength,nameof(count),nameof(bufferOffset),nameof(input)),nameof(count));}// Copy input into buffer, fixing up '-' -> '+' and '_' -> '/'.var i = bufferOffset;for (var j = offset; i - bufferOffset < count; i++, j++){var ch = input[j];if (ch == '-'){buffer[i] = '+';}else if (ch == '_'){buffer[i] = '/';}else{buffer[i] = ch;}}// Add the padding characters back.for (; paddingCharsToAdd > 0; i++, paddingCharsToAdd--){buffer[i] = '=';}// Decode.// If the caller provided invalid base64 chars, they'll be caught here.return Convert.FromBase64CharArray(buffer, bufferOffset, arraySizeRequired);}
详细内容可以参见 github:https://github.com/dotnet/aspnetcore/blob/main/src/Shared/WebEncoders/WebEncoders.cs
当然,你如果不嫌麻烦,可以手工处理。
public string Decode(string str){byte[] decbuff = Convert.FromBase64String(str.Replace(",", "=").Replace("-", "+").Replace("/", "_"));return System.Text.Encoding.UTF8.GetString(decbuff);}public string Encode(string input){byte[] encbuff = Encoding.UTF8.GetBytes(input ?? "");return Convert.ToBase64String(encbuff).Replace("=", ",").Replace("+", "-").Replace("_", "/");}
点评区
这个问题相信很多朋友都遇到过,导致 url 中的 base64 的一部分当成了参数处理,后来没办法只能将需要 base64 的参数放到了 post body 中,现在终于知道怎么解决了。
如何通过 C# 生成安全的 Base64 URL 字符串?相关推荐
- Java通过JfreeChart生成转Base64图片字符串(饼图、折线图、柱状图、折线图-多条、3D柱状图、气泡图、时序图、曲线图、区域图、分布图、联合分类图、双X轴图、K线图、柱状图-横向等图)
工具类 CreatLineChart.java package DrawLine;import java.awt.BasicStroke; import java.awt.Color; import ...
- 小tip: base64:URL背景图片与web页面性能优化(转载)
今天在代码看到css北京图片使用了base64格式表示图片,SO,百度了一下.感觉完全可以解释了. 一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在H ...
- 使用base64:url 来定义背景图片url
普通的背景图片css是这样的: background-image:url(http://www.zhangxinxu.com/wordpress/wp-content/themes/default/i ...
- Java通过图片url地址获取图片base64位字符串的两种方式
工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...
- 网站性能优化:base64:URL传输图片文件
一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...
- 小tip: base64:URL背景图片与web页面性能优化——张鑫旭
一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...
- 短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口
短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口[最新版]_数据API_数据应用-云市场-阿里云 如何生成短网址,短链接? 这为我们短信节约了巨额的成本 publ ...
- 【python3】通过hashlib 和base64 对字符串进行加密
这篇文章是讲述 如何通过hashlib 和base64 对字符串进行加密的 hashlib 强大的hashlib,提供了用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA2 ...
- 一个请求从 URL 字符串到 HTML 代码的“漫长曲折”之路
作者:Dino Esposito 出处:msdn ASP.NET HTTP 运行时 一个请求从 URL 字符串到 HTML 代码的"漫长曲折"之路 Dino Espos ...
最新文章
- MyBatis 环境搭建
- 24 个你应该了解的 PHP 库
- 前端的面试之旅(一)
- 优化 | 利用SciPy求解非线性规划问题
- 035、Linux下Dmidecode查看硬件信息
- 论文浅尝 | GEOM-GCN: Geometric Graph Convolutional Networks
- 开源监控利器grafana
- python时间显示_python脚本之日期格式显示
- iptables基本知识
- 2022聚合工艺操作证考试题模拟考试平台操作
- python酒店数据分析_python数据分析实战——AirBnb用户分群
- 美团 java_GitHub - meituan/mssapi_java: 美团云对象存储 Java SDK
- 初学者学习彩铅,那些作品最适合临摹?
- 欢迎高校使用云创大数据的高质量大数据和人工智能免费直播授课!
- 【ML on Kubernetes】第 3 章:探索 Kubernetes
- 浅析Spring之sessionFactory
- 使用微信小程序获取附近人的位置遇到的坑
- 1944 Problem D	八进制
- vue设置404页面
- 闭关六个月涉及到的微机原理简答题(特别适用河北专接本)
热门文章
- lucene两个分页操作
- highgui java opencv_java – OpenCV 3.0.0 JAR缺少HighGUI
- 通过修改然后commit的方式创建自己的镜像
- 博弈论进阶之Anti-SG游戏与SJ定理
- JCheckbox全选
- Spark 性能调优-内存设置-GC设置
- [恢]hdu 2147
- php 打印对象详细信息,php打印显示数组与对象的函数详解
- 大学留级两年不敢和家人说_您说什么:如何与家人保持联系?
- gmail收件箱标签设置_通过多个收件箱实验室有效管理您的Gmail