咨询区

  • 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 字符串?相关推荐

  1. Java通过JfreeChart生成转Base64图片字符串(饼图、折线图、柱状图、折线图-多条、3D柱状图、气泡图、时序图、曲线图、区域图、分布图、联合分类图、双X轴图、K线图、柱状图-横向等图)

    工具类 CreatLineChart.java package DrawLine;import java.awt.BasicStroke; import java.awt.Color; import ...

  2. 小tip: base64:URL背景图片与web页面性能优化(转载)

    今天在代码看到css北京图片使用了base64格式表示图片,SO,百度了一下.感觉完全可以解释了. 一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在H ...

  3. 使用base64:url 来定义背景图片url

    普通的背景图片css是这样的: background-image:url(http://www.zhangxinxu.com/wordpress/wp-content/themes/default/i ...

  4. Java通过图片url地址获取图片base64位字符串的两种方式

    工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...

  5. 网站性能优化:base64:URL传输图片文件

    一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...

  6. 小tip: base64:URL背景图片与web页面性能优化——张鑫旭

    一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...

  7. 短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口

    短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口[最新版]_数据API_数据应用-云市场-阿里云 如何生成短网址,短链接? 这为我们短信节约了巨额的成本 publ ...

  8. 【python3】通过hashlib 和base64 对字符串进行加密

    这篇文章是讲述 如何通过hashlib 和base64 对字符串进行加密的 hashlib 强大的hashlib,提供了用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA2 ...

  9. 一个请求从 URL 字符串到 HTML 代码的“漫长曲折”之路

    作者:Dino Esposito       出处:msdn ASP.NET HTTP 运行时 一个请求从 URL 字符串到 HTML 代码的"漫长曲折"之路 Dino Espos ...

最新文章

  1. MyBatis 环境搭建
  2. 24 个你应该了解的 PHP 库
  3. 前端的面试之旅(一)
  4. 优化 | 利用SciPy求解非线性规划问题
  5. 035、Linux下Dmidecode查看硬件信息
  6. 论文浅尝 | GEOM-GCN: Geometric Graph Convolutional Networks
  7. 开源监控利器grafana
  8. python时间显示_python脚本之日期格式显示
  9. iptables基本知识
  10. 2022聚合工艺操作证考试题模拟考试平台操作
  11. python酒店数据分析_python数据分析实战——AirBnb用户分群
  12. 美团 java_GitHub - meituan/mssapi_java: 美团云对象存储 Java SDK
  13. 初学者学习彩铅,那些作品最适合临摹?
  14. 欢迎高校使用云创大数据的高质量大数据和人工智能免费直播授课!
  15. 【ML on Kubernetes】第 3 章:探索 Kubernetes
  16. 浅析Spring之sessionFactory
  17. 使用微信小程序获取附近人的位置遇到的坑
  18. 1944 Problem D 八进制
  19. vue设置404页面
  20. 闭关六个月涉及到的微机原理简答题(特别适用河北专接本)

热门文章

  1. lucene两个分页操作
  2. highgui java opencv_java – OpenCV 3.0.0 JAR缺少HighGUI
  3. 通过修改然后commit的方式创建自己的镜像
  4. 博弈论进阶之Anti-SG游戏与SJ定理
  5. JCheckbox全选
  6. Spark 性能调优-内存设置-GC设置
  7. [恢]hdu 2147
  8. php 打印对象详细信息,php打印显示数组与对象的函数详解
  9. 大学留级两年不敢和家人说_您说什么:如何与家人保持联系?
  10. gmail收件箱标签设置_通过多个收件箱实验室有效管理您的Gmail